web-dev-qa-db-ja.com

LinkedList、キューvsリストの違い

これら2つのオブジェクトを作成するときの違いは何ですか

Queue<String> test = new LinkedList<String>();

そして

List<String> test2 = new LinkedList<String>();

testtest2の実際の違いは何ですか?どちらもLinkedListですか?パフォーマンスの違いや、他のものを使用する理由はありますか?

27
Kailua Bum

作成した2つのステートメントは、それぞれLinkedList<String>オブジェクトを作成して文字列のリストを保持し、それを変数に割り当てます。違いは変数の型です。

LinkedList<String>Queue<String>型の変数に割り当てると、Queue<String>インターフェースで利用できるLinkedListのメソッドにのみアクセスできます。これには、エンキューのサポートが含まれます要素のデキュー。これは、さまざまな操作にキューを使用するプログラムを作成する必要があり、リンクリストを使用してそのキューを実装する場合に役立ちます。

タイプLinkedList<String>の変数にList<String>を割り当てると、List<String>インターフェースで使用できるLinkedListのメソッドにのみアクセスできます。これは、要素のシーケンスを維持します。これは、たとえば、どこでも拡大および縮小できる要素のリストを処理する必要がある場合に役立ちます。

つまり、2つの線は同じオブジェクトを作成しますが、それらを異なる方法で使用することを意図しています。 1つはリンクリストに基づくキューが必要であると述べ、もう1つはリンクリストに基づく一般的な要素のシーケンスが必要であると述べています。

お役に立てれば!

42
templatetypedef

どちらの場合も、LinkedListをインスタンス化しています。

違いは、それらのインスタンスを参照するために使用する変数のタイプです。

testのタイプはQueueおよびtest2Listタイプです。変数のタイプに応じて、その特定のタイプで指定されたメソッドのみを呼び出すことができます。これはあなたの状況にとって重要なことだと思います。

どちらの場合も使用している実際の実装は同じ(LinkedList)であるため、パフォーマンスに関しては同じになります。

4
Bhesh Gurung

公開するメソッドのタイプを除いて、どちらもほぼ同じだと思います。 LinkedListは両方のインターフェースを実装するため、それらの1つを選択すると、そのインターフェースタイプのメソッドにアクセスできるようになります。

インターフェースメソッドの宣言については、これらのリンクをご覧ください。

http://docs.Oracle.com/javase/6/docs/api/Java/util/Queue.htmlhttp://docs.Oracle.com/javase/6/ docs/api/Java/util/List.html

オブジェクトの実装は一般的であるため、パフォーマンスは変わらないはずですが、パフォーマンスについてはわかりません。

3
Ashish Thukral