開発者ドキュメント

JavaのLinkedListガイド

1.はじめに



LinkedList


は、


https://docs.oracle.com/javase/の二重リンクリストの実装です。

8/docs/api/java/util/List.html[リスト]

および


Deque


インタフェース。これはすべてのオプションのリスト操作を実装し、すべての要素(

null

を含む)を許可します。

2.特徴

以下に

LinkedList

の最も重要なプロパティを見つけることができます。

  • リストにインデックスを付ける操作は、リストからリストをトラバースします。

指定されたインデックスに近い方の先頭または末尾
**

同期

ではありません

  • その



イテレータ


そして


ListIterator


イテレータは

fail-fast

(つまり、イテレータの作成後、リストが
修正、


ConcurrentModificationException


スローされます)
** すべての要素はノードであり、次への参照を保持します。

前のもの
** 掲載順を維持する

List list = Collections.synchronizedList(new LinkedList(...));

3.

ArrayList

との比較

どちらも

List

インターフェースを実装していますが、それらのセマンティクスは異なります。どちらを使用するかの決定に間違いなく影響します。


3.1. 構造


ArrayList

は、

Array

を基にしたインデックスベースのデータ構造です。 O(1)と同等のパフォーマンスで、要素へのランダムアクセスを提供します。

一方、

LinkedList

はそのデータを要素のリストとして格納し、すべての要素はその前後の要素にリンクされます。この場合、アイテムの検索操作の実行時間はO(n)になります。


3.2. オペレーション

要素がコレクション内の任意の位置に追加されたときに配列のサイズを変更したりインデックスを更新したりする必要はなく、周囲の要素内の参照のみが変更されるため、アイテムの挿入、追加、削除操作は

LinkedList

で高速です。


3.3. メモリ使用量


LinkedList

の各ノードには前の要素と次の要素の2つの参照が格納されているのに対し、

LinkedList



ArrayList

よりも多くのメモリを消費します。

4.使い方

以下は

LinkedList

の使用方法を示すコードサンプルです。


4.1. 作成

LinkedList<Object> linkedList = new LinkedList<>();


4.2. 要素を追加する


LinkedList



List



Deque

インタフェースを実装しています。標準の

add()



addAll()

メソッドの他に、それぞれ

addFirst()



addLast()

を見つけることができます。


4.3. 要素を削除する

要素の追加と同様に、このリスト実装は

removeFirst()



removeLast()を提供します。 +

また、ブール値を返す便利なメソッド

removeFirstOccurence()

および

removeLastOccurence()

があります(コレクションに指定の要素が含まれる場合はtrue)。


4.4. キュー操作


Deque

インターフェースはキューのような振る舞いを提供します(実際には

Deque



Queue

インターフェースを拡張します):

linkedList.poll();
linkedList.pop();

これらのメソッドは最初の要素を取得してそれをリストから削除します。


poll()



pop()

の違いは、

pop

が空のリストに

NoSuchElementException()

をスローするのに対して、

poll

はnullを返すことです。

API

pollFirst()



pollLast()

も利用できます。

たとえば、

push

APIの仕組みは次のとおりです。

linkedList.push(Object o);

これは、要素をコレクションの先頭として挿入します。


LinkedList

には他にもたくさんのメソッドがありますが、そのほとんどは既に

Lists

を使っているユーザーにはおなじみのはずです。

Deque

によって提供される他のものは「標準的な」メソッドに代わる便利な方法かもしれません。

完全なドキュメントはhttps://docs.oracle.com/javase/8/docs/api/java/util/LinkedList.html[ここ]にあります。

5.まとめ


ArrayList

は通常、デフォルトの

List

実装です。

しかし、一定のアクセス時間および効果的なメモリ使用量よりも一定の挿入/削除時間(例えば、頻繁な挿入/削除/更新)に対する好みなど、

LinkedList

を使用することがより適している特定の使用例がある。

コードサンプルはhttps://github.com/eugenp/tutorials/tree/master/core-java-collections[over on GitHub]にあります。

モバイルバージョンを終了