次のように配列リストを定義することの違いは何ですか:
List list = new LinkedList();
そしてこう?
LinkedList list = new LinkedList();
次のように配列リストを定義することの違いは何ですか:
List list = new LinkedList();
そしてこう?
LinkedList list = new LinkedList();
他の回答が示唆しているように、Listはインターフェースであり、LinkedListは実際の実装タイプです。たとえば、後でArrayListを使用することにした場合は、次のように入力できます。
List list = new ArrayList();
ArrayListがインターフェイスリストを宣言しているためです。欠点は、後でListインターフェイスの一部ではないArrayList / LinkedList /(リストにないメソッドを持つ他のクラス名)のメソッドを呼び出したい場合(これはおそらく問題にはなりません)、それが本当にArrayListなどであるかどうかを確認し、それらの型にキャストする必要があります。このような:
ArrayList arrayList = (ArrayList) list;
*それが本当にArrayListであることを確認した後でのみ、それ以外の場合は例外をスローします。
最初のものはリストを宣言し、リストインターフェースの新しいLinkedList具象実装でそれを初期化します。コードの残りの部分は、具体的な実装を気にしません。重要なのはそれがリストであるということだけです。後でArrayListの方が効率的であることに気付いた場合は、初期化を変更するだけです。
2つ目は、LinkedListを宣言し、新しいLinkedListで初期化します。コードの残りの部分は、それがLinkedListであることを認識しており、ListにないLinkedListのメソッドを使用できます。後でArrayListの方が効率的であることに気付いた場合は、残りのコードを変更する必要があるかもしれません。
最初のものが一般的に好まれるべきです:可能な限り最も一般的なタイプを使用し、実装ではなくインターフェースにコードを記述します。
また、raw型は使用しないでください。ただし、常にジェネリック型を使用してください。
List<String> list = new LinkedList<String>();
1 つは、変数の型のインターフェイスを使用します。もう 1 つは具象クラス型を使用します。
一般に、変数型にはインターフェイス型を使用することをお勧めします。これは、移植性が高く、密結合が少ないためです。
これは、インターフェイスへのコーディングと呼ばれます。それには一定の利点があります。あなたの質問に基づいて、あなたはこの言語に不慣れだと思います。
Java world によると、次のような利点があります。
設計: オブジェクトのメソッドを迅速に指定して、影響を受けるすべての開発者に公開できます 開発: Java コンパイラは、インターフェイスのすべてのメソッドが正しい署名で実装され、インターフェイスへのすべての変更が他の開発者にすぐに表示されることを保証します 統合:十分に確立されたインターフェイスにより、クラスまたはサブシステムをすばやく接続する機能があります。
これは、 http://www.javaworld.com/jw-08-1999/jw-08-interfaces.htmlを読み始めるのに適した場所です。
どちらも機能します。違いは、それList
がインターフェースでLinkedList
あり、実装であることです。後で実装を簡単に切り替えることができるため、インターフェイスを使用することをお勧めします。