ListとArrayとArrayList
- Array
- ArrayList
- List
の違いがよく分からないので、ググった。
こういうとき、英語のgoogle先生はvsをsuggestするのか。
http://stackoverflow.com/questions/2279030/type-list-vs-type-arraylist-in-java
Q:
(1) List<?> myList = new ArrayList<?>(); (2) ArrayList<?> myList = new ArrayList<?>();
(1)をアプリケーションの実装でよく見るし自分も使ってるんだけど、(2)を使わないのはどうして?
A:
Listを使っておくと、他の部分のコードに影響を与えずにListの実装を変えることが出来る(たとえばLikedListとか)、 という利点があるんだ。
これは、ArrayListでこなすには難しい仕事で、どこでもArrayListからLinkedListに変更する必要があるからだけではなく、 特定のメソッドでArrayListの特定のメソッドを使っていたからかもしれない、ということなんだ。
http://docs.oracle.com/javase/tutorial/collections/implementations/list.html を読んでみると良いよ。
上位クラス(抽象クラス?)のListで受け取っておいた方が
個々の関数で行いたい処理に合わせた特定のメソッドを持つサブクラスに変換しやすいよね、
そういう事態が考えられる場合は、
関数間でやり取りする時はListクラスでやり取りしておけば、
他の関数でどのサブクラスを使っている、ということをあんまり気にしなくて良いよね、
という話なんだろうか。
Effective Javaとかそういうの読んでみたら良さそうだけど、今年の(個人的)言語枠はRubyなので、来年あたりにしたい。
http://java67.blogspot.jp/2012/12/difference-between-array-vs-arraylist-java.html
Difference between Array vs ArrayList in Java
- Array 基本型か、オブジェクトをしまう
ArrayList オブジェクトだけ扱う
Array 固定長配列
ArrayList 可変長配列
Array Javaのコアな関数っぽい
ArrayList Collection framework(Vector, Hashtable, HashMap, LinkedListも入ってる)に入ってる
ArrayではGenerics((配列に入っているものの型を保証する機能)を破ると
ArrayStoreException
を出す)は使えないが、ArrayListでは使える。(Listでも使える)
Arrayではlengthメソッドでサイズを取得するが、
初期化時にサイズを指定しなかった場合の挙動が異なる。
そもそもListとは https://docs.oracle.com/javase/jp/6/api/java/util/List.html