2017-12-26 22 views
1

私は勉強していますリンクされたリストと私は私の教科書からこの例を理解していません。私はジェネリックスのコンセプトを理解しています(この時点ではあまりうまくいかないかもしれませんが)。自分のコードでいくつかのジェネリッククラスを実装しました。チュートリアルを読んで見ましたが、私はまだ何かを頭で囲むことができません。ノード< E>実際には(実際には実際にはですが、それはタイプですか?)、このコードを実際にテストすることはできません。ノード<E>はこのリンクリストの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; 
     } 
    } 
} 

IはNodeオブジェクト、またはこのようなSinglyLinkedListオブジェクトの両方を作成するために、例えば試みました。私は明らかに何かを欠いているが、何が分からないのか分からない。

+0

インポートステートメントも貼り付けてください。なぜなら、異なる名前空間を持つNodeという名前の複数のクラスがあるからです。 – Shriram

+0

@Shriram完了。私が使った唯一のインポートはjava.utils。*ですが、この本は実際には言及していませんが、試してみるという私の決断でした。 – Sheenan

答えて

1

class SinglyLinkedList<E>は、ジェネリック型の要素のリンクリストを表します。あなたは、例えば、とString秒のリンクリストを作成することができます

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

class Node<E>SinglyLinkedListクラスの内部クラスです。リンクされたリスト内の単一のリンクを表します。これには、(ジェネリック型の)単一要素と次のリンクへの参照が含まれます。

Nodeは内部クラスSinglyLinkedListであるため、周囲のインスタンス(つまり、SinglyLinkedListクラスのインスタンス)を指定しないとインスタンスを作成できません。

ためだけ(SinglyLinkedListクラスの)親インスタンスが利用可能であるSinglyLinkedListクラスの(すなわち、非静的)メソッドインスタンス内

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

を書き込むことができます。

つまり、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 ();の両方をインスタンス化することはできません。 – Sheenan

+0

@Sheenanあなたが不完全な 'SinglyLinkedList'クラスを投稿したと仮定しました。完全なクラスには、 'add'や' remove'などのメソッドが含まれていると思います。 'Node'がプライベートクラスのままである限り、' SinglyLinkedList'クラスの外部から 'Node'のインスタンスを作成することはできません。 – Eran

関連する問題