2017-12-26 50 views
1

나는 링크 된 목록을 공부하고 내 교과서에서이 예제를 이해하지 않습니다. 나는 generics의 개념을 이해하지만 (아마도이 ​​시점에서는별로 좋지 않을 지 모르지만), 내 자신의 코드로 몇 개의 제네릭 클래스를 구현했고 많은 튜토리얼을 읽고 봤지만 여전히 내 머리를 감쌀 수 없다. Node < E> 실제로 수행 (어떤 실제로 이 실제로는? 일종), 그래서 난 정말이 코드를 테스트 할 수 없습니다.노드 <E>은이 Linked List Java 샘플 코드에서 무엇을 나타 냅니까?

SinglyLinkedList<E> NodeEl = new SinglyLinkedList<E>(); 
Node <E> node = new Node<E>(); 

와 아무 소용이 그들에게 모든 종류의 개체를 전달 :

import java.util.*; 

public class SinglyLinkedList<E> { 

    private class Node<E> { 
     private E element; 
     private Node<E> next; 

     public Node(E e, Node<E> n) { 
      element = e; 
      next = n; 
     } 

     public E getElement() { 
      return element; 
     } 

     public Node<E> getNext() { 
      return next; 
     } 

     public void setNext(Node<E> n) { 
      next = n; 
     } 
    } 
} 

나는 노드 객체 또는이 같은 SinglyLinkedList 객체 모두를 만들기 위해 예를 들어했습니다. 분명히 뭔가 빠졌지 만 나는 무엇을 이해할 수 없다.

+0

너무 쉽게 가져 오기 문을 붙여 넣습니다. 이름 공간이 다른 Node라는 이름의 클래스가 여러 개 있기 때문입니다. – Shriram

+0

@Shriram 완료. 필자가 사용한 유일한 가져 오기는 java.utils. *입니다. 그러나 실제로 책을 언급하지는 않았지만 시도한 것은 내 결정이었습니다. – Sheenan

답변

1

class SinglyLinkedList<E>는 일반적인 유형의 요소의 연결리스트를 나타냅니다.

당신은, 예를 들어, 함께 String s의 연결리스트를 만들 수 있습니다

SinglyLinkedList<String> list = new SinglyLinkedList<String>(); 

class Node<E>SinglyLinkedList 클래스의 내부 클래스입니다. 링크 된 목록의 단일 링크를 나타내며, 단일 요소 (일반 유형의)와 다음 링크에 대한 참조를 포함합니다.

Node은 내부 클래스가 SinglyLinkedList이므로 둘러싸는 인스턴스 (예 : SinglyLinkedList 클래스)의 인스턴스를 제공하지 않으면 인스턴스를 만들 수 없습니다. 합니다 (SinglyLinkedList 클래스)를 둘러싸 인스턴스 가능한 곳

따라서 만, 인스턴스 내부

Node<E> node = new Node<E>(); 

SinglyLinkedList 클래스 (즉, 비 - 정적) 방법을 쓸 수있다.

즉, Node이 요소 유형이 SinglyLinkedList 인 것과 동일한 유형의 요소를 보유해야하는 경우, 제네릭이 아니어야합니다. 그것은 단지 둘러싸는 클래스 (SinglyLinkedList)의 제네릭 형식 매개 변수를 사용할 수 있습니다.

public class SinglyLinkedList<E> { 

    private class Node { 
     private E element; 
     private Node next; 

     public Node(E e, Node n) { 
      element = e; 
      next = n; 
     } 

     public E getElement() { 
      return element; 
     } 

     public Node getNext() { 
      return next; 
     } 

     public void setNext(Node n) { 
      next = n; 
     } 
    } 
} 
+0

답장을 보내 주셔서 감사합니다. 지금은 조금 더 명확 해졌지만 여전히 구현 방법에 대해서는 매우 모호합니다. 컴파일러는'SinglyLinkedList list = new SinglyLinkedList (); '을 수락하지만, 나는 아직도이 객체로 무엇을해야하는지 이해하지 못합니다. 또한 Node Node = new Node();와 Node node = new Node ();이 노드를 인스턴스화 할 수없는 것처럼 보입니다. – Sheenan

+0

@Sheenan 불완전한 'SinglyLinkedList' 클래스를 게시했다고 가정했습니다. 나는 전체 클래스가'add'와'remove'와 같은 메소드를 포함 할 것으로 기대합니다. 'Node'가 프라이빗 클래스로 남아있는 한'SinglyLinkedList' 클래스 외부에서'Node' 인스턴스를 생성 할 수 없습니다. – Eran