2017-05-03 3 views
-1

誰かがこのコードのしていることを説明することができますか、私はjavaを初めて使用しています。 Javaでのジェネリックの理解

Queue <TreeNode> queue = new LinkedList<TreeNode>(); 

が、私はこのコードがタイプ TreeNodeのある変数名 queueとキューを作成すると信じて、右側が何を意味するのでしょうか?キューをタイプ TreeNodeのリンクリストに割り当てるかどうか

+1

[Javaでジェネリックアレイを作成するにはどうすればいいですか?](http://stackoverflow.com/questions/529085/how-to-create-a-generic-array-in-java) – Nemus

+0

はい。 'LinkedList'は待ち行列です。 [java.util.LinkedList](https://docs.oracle.com/javase/7/docs/api/java/util/LinkedList.html) – Obicere

+2

@Nemusここではほとんど適用されません。 – Obicere

答えて

3

クラスjava.util.Queueは、タイプパラメータを使用して、作成されたタイプ以外のタイプを追加しないことを保証します。

あなたのようQueueを作成する場合:

Queue <TreeNode> queue = new LinkedList<TreeNode>(); 

それはqueueだけTreeNodeオブジェクトを格納できることを意味します。これはメソッドadd,offer,remove,pollの型チェックに使用されます。

0

Genericでは、DataStructureに格納される参照のタイプを指定できます。あなたの例では、ListはtreeNode型の変数になります。

ただし、クラスなどの独自のユーザー定義型を含め、任意の型を格納できます。

+0

リストには変数が含まれていないため、参照が含まれています。 –

+0

保存するタイプの参照 – Archmede

0

以下のリンクでは、ジェネリックがJavaでどのようなものであり、なぜそれらが使用されるのかについて説明しています。

https://docs.oracle.com/javase/tutorial/java/generics/why.html

我々は、オブジェクトの型の安全性を確認してくださいジェネリックを使用することによって。あなたの質問

Queue <TreeNode> queue = new LinkedList<TreeNode>(); 

あなたはジェネリック型 "のTreeNode" でキューを作成しているで

。したがって、 "TreeNode"クラスをインスタンス化するオブジェクトのみが許可されます。

0

はい、このことを理解するには、Javaのジェネリックスをほとんど理解していないといけません。ジェネリックスは、JavaとJavaのコレクションフレームワークの非常に重要な機能は、完全な形式でこの機能を使用しています。あなたの声明を以下に記しておきます。

ここで注目すべき最初のことは、ほぼすべてのコレクションクラスとインターフェイスが本質的に一般的であることです。つまり、彼らは彼らの中に任意のタイプのデータを格納することができます。以下の例を参照してください。

List list = new ArrayList(); 

    String sObj = "stringObj"; 
    Integer iObj = 1; 
    MainTest classObj = new MainTest(); 

    list.add(sObj); //Storing string 
    list.add(iObj); // Stroing int 
    list.add(classObj); //Storing class object 

ここでは、私がArrayListを作成し、List参照変数で参照していることがわかります。ここでは、私はここでどのクラスでもmetionedしていないことに気づくことができますので、デフォルトではすべてのオブジェクトタイプのオブジェクトが保存されます。これで、コレクションにTreeaNodeというオブジェクトの1つのタイプのみを格納するようにコレクションを制限していることを示しています。他のタイプのオブジェクトがコレクションに追加されるようになりました。左側のステートメントでは、という名前の参照変数を作成します。データ型がQueue of TreeNodeのキューを作成し、右側にTreeNodeオブジェクトintのみを格納できるLinkedListのオブジェクトをの参照変数参照変数に割り当てます。つまり、キューにTreeNodeを除くオブジェクトを追加することはできません。この割り当ては、QueueクラスとLinkedListクラスの両方でCollectionインタフェースを実装することができます。