0

CoreJava book で Collections を学習していますが、次のコードを見つけました。

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

なぜこのコードがこのようにならないのか疑問に思います:

LinkedList<String> a = new LinkedList<String>();

なぜaをリストとして宣言するのですか?

4

5 に答える 5

4

List はインターフェイスで、LinkedList はインターフェイスの特定の実装です。「「実装」ではなく「インターフェース」へのプログラム: http://en.wikipedia.org/wiki/Design_Patterns#Introduction.2C_Chapter_1

于 2011-11-12T23:40:23.977 に答える
4

に固有の操作を使用する必要がある場合は、2番目が機能し、望ましいかもしれませんLinkedList。しかし、この必要性は通常非常にまれです。List1 つ目はより一般的なもので、 1 行を変更するだけで別の実装を使用できます。他のコード (メソッド パラメーターなど) を変更する必要はありません。

PS明確にするために-aはのLinkedList具体的な実装ですList

于 2011-11-12T23:40:48.613 に答える
3

コード:

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

よりも良い:

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

これは、listasを宣言しList、プログラムのパフォーマンスが良くないことがわかった場合、コードを次のように変更できるためです。

List<String> list = new ArrayList<String>();

プログラムがより速く実行されるかどうかを確認します。これの利点は、コードの残りの部分を変更せずにその変更を行うことができることです。

結論として、可能であれば、参照をインターフェイスとして宣言します(Listはインターフェイスです)。

List<String> list;

また、実装を簡単に切り替えることができます(class ArrayListclass LinkedListはインターフェースの実装ですList):

list = new LinkedList<String>();

また

list = new ArrayList<String>();
于 2011-11-13T00:26:00.633 に答える
1

の別の良い例。

なぜリストとして宣言するのですか?

方法を考えてみましょう。

public void doStuff(LinkedList llObj){} 

これは、ユーザーがLinkedListの受け渡しのみを許可するメソッドへの制限を示しています。

public void doStuff(List listObj) {} 

このメソッドでは、任意のリストを渡すことができます。

お役に立てれば。

于 2011-11-13T01:34:05.760 に答える