CoreJava book で Collections を学習していますが、次のコードを見つけました。
List<String> a = new LinkedList<String>();
なぜこのコードがこのようにならないのか疑問に思います:
LinkedList<String> a = new LinkedList<String>();
なぜaをリストとして宣言するのですか?
CoreJava book で Collections を学習していますが、次のコードを見つけました。
List<String> a = new LinkedList<String>();
なぜこのコードがこのようにならないのか疑問に思います:
LinkedList<String> a = new LinkedList<String>();
なぜaをリストとして宣言するのですか?
List はインターフェイスで、LinkedList はインターフェイスの特定の実装です。「「実装」ではなく「インターフェース」へのプログラム: http://en.wikipedia.org/wiki/Design_Patterns#Introduction.2C_Chapter_1
に固有の操作を使用する必要がある場合は、2番目が機能し、望ましいかもしれませんLinkedList
。しかし、この必要性は通常非常にまれです。List
1 つ目はより一般的なもので、 1 行を変更するだけで別の実装を使用できます。他のコード (メソッド パラメーターなど) を変更する必要はありません。
PS明確にするために-aはのLinkedList
具体的な実装ですList
。
コード:
List<String> list = new LinkedList<String>();
よりも良い:
LinkedList<String> list = new LinkedList<String>();
これは、list
asを宣言しList
、プログラムのパフォーマンスが良くないことがわかった場合、コードを次のように変更できるためです。
List<String> list = new ArrayList<String>();
プログラムがより速く実行されるかどうかを確認します。これの利点は、コードの残りの部分を変更せずにその変更を行うことができることです。
結論として、可能であれば、参照をインターフェイスとして宣言します(List
はインターフェイスです)。
List<String> list;
また、実装を簡単に切り替えることができます(class ArrayList
とclass LinkedList
はインターフェースの実装ですList
):
list = new LinkedList<String>();
また
list = new ArrayList<String>();
の別の良い例。
なぜリストとして宣言するのですか?
方法を考えてみましょう。
public void doStuff(LinkedList llObj){}
これは、ユーザーがLinkedListの受け渡しのみを許可するメソッドへの制限を示しています。
public void doStuff(List listObj) {}
このメソッドでは、任意のリストを渡すことができます。
お役に立てれば。