2017-05-12 2 views
2

LinkedList를 통해 Java 구현을 보았습니다. 내가 링크드리스트를 시도하고 구현한지 얼마 전, 포인터와 주소 및 많은 노력이 필요했습니다. Java를 사용하면 구현이 쉬우나 여전히 일부 작업을 수행했습니다. 제가 링크드리스트에 대해 알고있는 것은 다음 다이어그램에서 명확합니다. 1,2,3,4는 링크드리스트의 노드입니다. enter image description hereJava에서 Linkedlist 구현은 C++에서 linkedlist와 같지 않습니다.

그러나 자바에서는 LinkedList를 다음 그림과 같이 생각하게했습니다. 다음과 같이 자바에서 LinkedList의 구현 코드는 enter image description here

, 다이어그램에서

class LinkedListNode 
{ 
    LinkedListNode nextNode = null;//consider this member variable 
    int data; 
    public LinkedListNode(int data) 
    { 
     this.data = data; 
    } 
    void appendItemToLinkedList(int newData) 
    { 
     LinkedListNode end = new LinkedListNode(newData); 
     LinkedListNode temp = this; 
     while (temp.nextNode != null) { temp = temp.nextNode; } 
     temp.nextNode = end; 

    } 
} 

public static void main(String[] args) 
    { 
     LinkedListNode list = new LinkedListNode(10); 
     list.appendItemToLinkedList(20); 
     list.appendItemToLinkedList(30); 
     list.appendItemToLinkedList(40); 
     list.appendItemToLinkedList(50); 
     list.appendItemToLinkedList(60); 
    } 

, 당신은 노드 객체가 다른 노드 객체 내부에 명확하게 볼 수 있습니다. 정말 연결된 목록인가요? 아니면 다른 컨테이너를 들고있는 부모 컨테이너입니까? 목록은 하나의 다른 (는 LinkedList 형이었던 것인지 같이 원시 형)을 포함한다는 생각에서

+4

무엇이 문제입니까? – Marievi

+1

나는 당신이 이것을 잘못 생각하고 있다고 생각합니다. 자바 링크 된 목록, 후드 아래, likey는 C가하는 것과 같은 방식으로 포인터를 사용합니다. –

+2

자바 링크드리스트의 중앙에 tootsie 롤이 있습니까? –

답변

5

번째 결과도.

첫 번째 다이어그램은 LinkedList을 참조하면을 나타냅니다.

LinkedList은 기본 형식이 아니기 때문에 nextNode 필드에는 전체 LinkedList이 저장되어 있지 않으며 참조가 하나만 있습니다. 따라서 첫 번째 다이어그램은 Java에서도 올바른 다이어그램입니다.

은 참조 :

+1

OP와 비교하여 C/C++을 Java와 비교하여 미세 조정 : Java는 개체/값과 개체 (Java 참조가 실제로 있음) *를 명시 적으로 구분하지 않고 * 명시 적으로 * 암시 적으로 * (투명하게) 기본 유형 (제공된 링크 참조). – Aconcagua

1

꽤 있습니다 ++ 자바와 C에 연결된 목록의 구현 비슷한. 유일한 차이점은 다른 언어로 인한 자연 차이입니다. 두 가지 모두에서 LinkedListNode에 대한 엔티티 (클래스)를 갖게됩니다. 이 클래스는 모두 Java에서 참조가 될 next 필드 또는 다음 노드에서 C++의 포인터가됩니다. 삽입 방법도 동일하게 보입니다. 전반적으로 비슷합니다.

그리고이 디자인에 맞는 다이어그램은 물론 첫 번째 것입니다.

0

Java의 LinkedList는 이중 LikedList로 구현되므로 C++의 경우와 같이 기본 유형이 아닙니다. FYI - JavaOne 2016에서 Stock (Doctor Deprecator)의 강연에서 java는 고유 한 이유로 LinkedLists, Vectors 및 기타 데이터 구조에 대한 지원을 중단 할 계획입니다. 그러므로 존재할 수있는 혼란과 기술적 인 차이.

+1

OP는 C++과 비교하여 Java에서 Linked-List의 수동 구현에 대해 이야기합니다. Java의 즉시 사용할 수있는 연결 목록이 아닙니다. – SHG

+0

또한'std :: list'는 "원시적"타입이 아닙니다 (C++은 그 용어를 사용하지 않습니다), 그것은 템플릿 클래스입니다. C++ 클래스는 사용자 정의 유형입니다 (자바에서는 모든 클래스가 참조 유형이지만 C++에는이 요구 사항이 없음) – UnholySheep

+0

동의합니다. 내 제안은 근본적인 정의에 대해 놀라지 않을 것입니다. 계획은 자바에서 컬렉션 프레임 워크에서 다른 데이터 구조의 지원을 격려하고 사용을 장려하기 때문에 LinkedList의 –

관련 문제