woshidan's loose leaf

ぼんやり勉強しています

ListとArrayとArrayList

の違いがよく分からないので、ググった。

こういうとき、英語の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メソッドでサイズを取得するが、

  • ArrayListではsizeメソッド

  • ArrayListにはaddメソッドがある。

  • 初期化時にサイズを指定しなかった場合の挙動が異なる。

そもそもListとは https://docs.oracle.com/javase/jp/6/api/java/util/List.html

ArrayListなどの親クラス。イテレータっぽいメソッドを持っている。いろんなコレクションクラスの親クラス。