16bit!

エンジニアじゃなくなっちゃった人が何かを書くブログ

【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();

にしておく方が良いですね。


終わり.