(1) JavaのArrrayListとLinkedListの違いについて
(1-1) 比較表(ArrayList vs LinkedList)
(1-2) まとめ
(1-3) 参考
(1) JavaのArrrayListとLinkedListの違いについて
両方ともListインターフェイスを実装している点や、データの追加時に順番が保持される点などは同じですが、いくつか異なる点があるので、その違いについてご紹介いたします。
(1-1) 比較表(ArrayList vs LinkedList)
(表)
観点 | ArrayList | LinkedList |
メモリ領域の連続性 | 連続した領域が必要(×)
(確保した領域以上のデータを追加しようとすると、別の新しい領域を確保する処理が行われる) |
連続していなくてもOK(◎)
(データの領域さえあれば、連続する必要なし) |
メモリの必要量 | 少ない(◎)
(アドレスの情報が無い分、LinkedListと比較するとメモリ消費が少ない) |
多い(×)
(値の情報のみならず、次の要素のアドレスを保持する必要がある) |
要素の追加・削除 | 遅い(×)
(追加・削除位置より後の要素を1つずつずらす処理が発生) |
速い(◎)
(リンクを1カ所付け替えるのみなので、ArrayListと比して速い) |
要素の参照 | 速い(◎)
(要素のアドレスを計算して直接アクセスできるため速い) |
遅い(×)
(最初の要素から目的の要素まで1つずつリンクを辿るため遅い) |
用途 | List | List、Deque
(ListのみならずDequeとしても使える) |
(図1)
これにデータの追加を行うと、次のように変化します。図の赤い矢印が示すように、LinkedListの場合はリンクの付け替えが1回で済みます(ArrayListのように後続の要素を1つずつズラす必要なし)
(図2)
(1-2) まとめ
ArrayListは「データの参照」が得意で、LinkedListは「データの追加・更新」が得意です。
(1-3) 参考
Javaに出てくる「List」は順序を持った要素の集合の事で、Listの挙動はListインターフェイスにて定義されています。そのため、ArrayListやLinkedListは同じメソッドが利用可能になっています。