2013-02-15 11 views
109

私は最近オフィスのアンドロイドプロジェクトでArrayListを使用していましたが、ListとArrayListの間ではちょっと混乱していますが、2つの違いは何ですか?ListとArrayListの違いは何ですか?

また、私はそれのような実装を見ました。

List<SomeObject> myList = new ArrayList<SomeObject>(); 

ArrayList<SomeObject> myList = new ArrayList<SomeObject>(); 

これら2つのインスタンスの違いは何ですか?

+6

[Type ListとJavaのArrayList型の可能な複製](http://stackoverflow.com/questions/2279030/type-list-vs-type-arraylist-in-java)、[Java List vs ArrayList]( http://stackoverflow.com/questions/9309093/java-list-vs-arraylist)、[List vs ArrayList](http://stackoverflow.com/questions/7726361/list-vs-arraylist)を参照してください。また、[List Vs. ArrayList](http://www.coderanch.com/t/379305/java/java/List-ArrayList)、[もっと詳しく](https://www.google.com/search?hl=ja&q=java+ list + vs + arraylist)! – Eric

+3

http://stackoverflow.com/questions/6867484/what-is-a-list-vs-an-arraylist?rq=1 –

+3

1つはインターフェイスで、もう1つはクラスです。今すぐあなた自身でそれを見つけることができます。 –

答えて

130

両方の例でリストの実装に違いはありません。 あなたのコードでさらに変数myListを使用する方法には違いがあります。あなたはメソッドとListインタフェースで定義されている基準部材のみ呼び出すことができます

List myList = new ArrayList(); 

:として、あなたのリストを定義

。 あなたのようにそれを定義した場合:

ArrayList myList = new ArrayList(); 

あなたはArrayListに固有のメソッドを呼び出し、その定義をリストから継承されているものに加えて、ArrayListの固有のメンバーを使用することができます。

しかし、ArrayListで実装された最初の例のListインターフェイスのメソッドを呼び出すと、(Listインターフェイスにはメソッドが実装されていないため)ArrayListのメソッドが呼び出されます。

これは多型と呼ばれています。あなたはそれを読むことができます。

+166

リストはクラスではなく、インターフェイスです。実装されたメソッドはありません。したがって、List参照のメソッドを呼び出すと、実際にはどちらの場合でもArrayListのメソッドが呼び出されます。 – robonerd

+3

上記で説明したように、違いがあります。リストはインタフェースです。クラスやプリミティブ型だけでなく、インタフェースでも変数を入力できます。 – emaringolo

+4

みんな、私の記事をよく読んでください。定義と実装を混在させないでください。どちらの場合も、実装は同じです:ArrayList。変数は異なって定義されます。私の答えであなたが何を変えようとしているのか分かりません。 – ATrubka

関連する問題