【Java】List と ArrayList の違い
Javaで使うListの代表格(の1つ)といえばArrayListですが、
こいつは実際のところどういうやつなんだ? という話。
・Listはインターフェース、ArrayListはその実装クラス
まず最初にListとArrayListの違いについてですが、ひとことで言ってしまえば上記の通りです。
ListはインターフェースでArrayListがその実装クラスの1つ。
要するに、Listっていう、複数の要素を格納して取り出すための設計があって、
それをArray(配列)という形で実現させたものがArrayListということです。
・ArrayListの特徴
前述した通り、ArrayListはListというインターフェースを配列の形で実現したものですが、
じゃあこいつの特徴って一体何なのか。
一言で言うと「i番目の要素を取り出すのが速い」に尽きます。
例えば同じくListインターフェースを実装したLinkedListでは、
要素の格納を、「次の要素のポインタを持つ」という形式で保持しているので、
i番目の要素を取り出そうと思ったら、先頭から順にポインタを辿っていくしかありません。
しかしArrayListは配列なので、ダイレクトにi番目にアクセスでき、当然その分速いのです。
では、先頭から順に要素を取り出すような使い方をする場合は必ずしもArrayListである必要はないのか?
これについては、イエスともノーとも言えません。
というのは、確かにiteratorを使って先頭から順にアクセスするだけの使い方をするなら
必ずしもArrayListである必要はありませんが、
そもそもListインターフェースがget(i)を持っているため、
今後の実装でi番目を直接取り出すようなコードを書かれないとは限らないのです。
・結局
Listインターフェースがget(i)を実装しろと言っている以上、
そのアクセスを速く行えるArrayListを使うのが一般的に良いと言えるでしょう。
まぁただ、ArrayList独自のメソッドを使わないのであれば、宣言の仕方としては、
ArrayList hogeList = new ArrayList();
ではなく、
List hogeList = new ArrayList();
にしておく方が良いですね。
終わり.