java.util.LinkedListはリンクリストを用いたjava.util.Listインターフェースの実装クラスになります。ArrayListと同じListインターフェースの実装クラスで、機能的にもArrayListとほぼ一緒ですが、LinkedListは各要素の並び順を個別に管理する構造となっているため、ArrayListと比較して要素の挿入や削除といった処理をより高速に行うことができます。ただし、その構造的要因により、要素の検索処理はArrayListよりも遅いといった特長があります。
LinkedListクラスの特長と主要メソッド
【クラスの特長】
クラス | 要素の重複 | nullの挿入 | 自動ソート |
java.util.LinkedList |
可 |
可 |
なし |
【クラスの主要メソッド】
戻り値 | メソッド | 説明 |
boolean |
add(Object o) |
リストの最後に要素oを追加します。 |
void |
add(int i, Object o) |
リストのi番目に要素oを追加します。
iがリストのサイズ+1よりも大きい場合はIndexOutOfBoundsExceptionの例外が発生します。
|
void |
addFirst(Object o) |
リストの最初に要素を追加します。
|
void |
addLast(Object o) |
リストの最後に要素を追加します。(機能はadd(Object o)と同じです) |
void |
clear() |
リストの全ての要素を削除します。 |
Object |
clone() |
リストのコピー(シャローコピー)を返します。 |
boolean |
contains(Object o) |
リストに要素oが存在するか判定し、存在する場合はtrueを返します。 |
Object |
get(int i) |
リストのi番目の要素を返します。
iが存在しない場合はIndexOutOfBoundsExceptionの例外が発生します。
|
int |
indexOf(Object o) |
リストを始めから検索し、要素oが最初に見つかった位置を返します。
見つからなかった場合は「-1」を返します。
|
boolean |
isEmpty() |
リストが空かどうかを判定し、空の場合にtrueを返します。 |
int |
lastIndexOf(Object o) |
リストを終わりから検索し、要素oが最初に見つかった位置を返します。
見つからなかった場合は「-1」を返します。
|
Object |
remove(int i) |
リストのi番目の要素を削除します。戻り値には削除した要素が返ります。
iが存在しない場合はIndexOutOfBoundsExceptionの例外が発生します。
|
Object |
set(int i, Object o) |
リストのi番目の要素を要素oに置き換えます。戻り値には置き換える前の要素が返ります。
iが存在しない場合はIndexOutOfBoundsExceptionの例外が発生します。
|
int |
size() |
リストの要素数を返します。
|
Object[] |
toArray() |
リストを配列にして返します。
|
LinkedListを生成する
LinkedListオブジェクトはnew演算子を使用して以下のように生成します。
JDK1.5以降
LinkedList<型> 変数名 = new LinkedList<型>();
上記方法での生成は、ジェネリクス機能が導入されたJ2SE5.0(JDK1.5)以降に可能です。それ以前の古いバージョンでは、以下の方法で生成します。
LinkedList 変数名 = new LinkedList();
LinkedListにデータを追加する
LinkedListオブジェクトにデータを追加する場合は、addメソッドを使用します。
LinkedList<String> array = new LinkedList<String>();
array.add("Google");
array.add("Apple");
array.add("Microsoft");
オブジェクトのサイズは動的に確保されるため、ユーザはサイズを気にせず必要に応じてデータを追加できます。追加されたデータは格納された順に「0」から始まるインデックス番号が付けられます。なお、addメソッドは挿入要素のほかに挿入位置を引数で指定することで、リストの任意の位置にデータを挿入することもできます。上記リストの3番目にデータを挿入したい場合は以下のように記述します。
array.add(2, "amazon");
挿入位置を第一引数で、挿入要素を第二引数で指定することに注意する必要があります。addメソッドは指定したインデックス番号に要素を挿入しますので、上記の結果は以下になります。
index | 要素 |
0 |
Google |
1 |
Apple |
2 |
amazon |
3 |
Microsoft |
LinkedListのデータを参照する
LinkedListオブジェクトのデータを参照する場合は、getメソッドを使用します。
System.out.println(array.get(0));
System.out.println(array.get(1));
System.out.println(array.get(2));
getメソッドは引数に参照したいインデックス番号を指定することで、リスト内の任意のデータを参照することができます。上記例では、標準出力にインデックス番号0~2の値を表示します。
LinkedListのデータを削除する
LinkedListオブジェクトのデータを削除する場合は、removeメソッドを使用します。
System.out.println(array.remove(3));
removeメソッドは引数に削除したいインデックス番号を指定することで、リスト内の任意のデータを削除することができます。また、メソッドの戻り値は削除した要素となりますので、上記例では削除された「Microsoft」が標準出力に表示されます。
サンプルプログラム
以下サンプルではLinkedListにString型の値を格納し、格納した値を標準出力に出力します。
import java.util.LinkedList;
public static void main(String[] args) {
LinkedList<String> array = new LinkedList<String>();
array.add("aaa");
array.add("bbb");
array.add("ccc");
for (String item : array){
System.out.println(item);
}
}
【実行結果】
aaa
bbb
ccc