Java LinkedList removeFirst() メソッド
removeFirst()は Java のLinkedListLinkedList クラスが提供するメソッドで、リンクリストの最初の要素を削除して返します。このメソッドはjava.util.LinkedListLinkedList クラスに属し、双方向リンクリストデータ構造の基本操作の一つです。
メソッド構文
public E removeFirst()
パラメータ
このメソッドは必要としませんいかなるパラメータも必要としません。
戻り値
- 削除されたリンクリストの最初の要素を返します
- 戻り型はジェネリック型 E(LinkedList の宣言時に指定した型)です。
メソッドの動作
正常な場合
リンクリストが空でない場合:
- メソッドはリンクリストの最初の要素を削除します
- 削除された要素を返します
- 元の2番目の要素が新しい最初の要素になります
- リンクリストのサイズ(size)は1減ります
例外の場合
リンクリストが空の場合(size = 0)、このメソッドを呼び出すとNoSuchElementException例外がスローされます。
使用例
基本例
例
import java.util.LinkedList;
public class LinkedListDemo {
public static void main(String[] args) {
// LinkedList を作成する
LinkedList<String> fruits = new LinkedList<>();
// 要素を追加する
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Cherry");
System.out.println("元のリンクリスト: " + fruits); // 出力: [Apple, Banana, Cherry]
// removeFirst() メソッドを使用する
String firstFruit = fruits.removeFirst();
System.out.println("削除された要素: " + firstFruit); // 出力: Apple
System.out.println("操作後のリンクリスト: " + fruits); // 出力: [Banana, Cherry]
}
}
public class LinkedListDemo {
public static void main(String[] args) {
// LinkedList を作成する
LinkedList<String> fruits = new LinkedList<>();
// 要素を追加する
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Cherry");
System.out.println("元のリンクリスト: " + fruits); // 出力: [Apple, Banana, Cherry]
// removeFirst() メソッドを使用する
String firstFruit = fruits.removeFirst();
System.out.println("削除された要素: " + firstFruit); // 出力: Apple
System.out.println("操作後のリンクリスト: " + fruits); // 出力: [Banana, Cherry]
}
}
空のリンクリストを処理する場合
例
import java.util.LinkedList;
import java.util.NoSuchElementException;
public class EmptyLinkedListDemo {
public static void main(String[] args) {
LinkedList<Integer> numbers = new LinkedList<>();
try {
int first = numbers.removeFirst();
System.out.println("削除された要素: " + first);
} catch (NoSuchElementException e) {
System.out.println("リンクリストが空のため、要素を削除できません!");
}
}
}
import java.util.NoSuchElementException;
public class EmptyLinkedListDemo {
public static void main(String[] args) {
LinkedList<Integer> numbers = new LinkedList<>();
try {
int first = numbers.removeFirst();
System.out.println("削除された要素: " + first);
} catch (NoSuchElementException e) {
System.out.println("リンクリストが空のため、要素を削除できません!");
}
}
}
関連メソッドの比較
| メソッド名 | 説明 | リンクリストが空の場合の動作 |
|---|---|---|
removeFirst() |
最初の要素を削除して返す | NoSuchElementException をスローする |
pollFirst() |
最初の要素を削除して返す | null を返す |
pop() |
最初の要素を削除して返す(スタック操作) | NoSuchElementException をスローする |
remove() |
最初の要素を削除して返す | NoSuchElementException をスローする |
実際の応用シーン
- キュー処理:LinkedList をキューとして使用する場合、removeFirst() は FIFO(先入れ先出し)操作を実装するために使用できます
- 元に戻す操作 (アンドゥ操作):一部のアプリケーションでは、最近追加された操作記録を削除する必要がある場合があります
- タスクスケジューリング:タスクリストの最初のタスクを処理します
パフォーマンスの考慮
removeFirst()このメソッドの時間計算量は O(1) です。理由は次のとおりです:
- LinkedList は内部に先頭と末尾のポインタを保持しています
- 最初の要素を削除するには、先頭ポインタと隣接ノードの参照を調整するだけで済みます
- 配列のように要素を移動する必要はありません
ベストプラクティス
- 空のリンクリストのチェック:removeFirst() を使用する前に、リンクリストが空かどうかを確認することをお勧めします
- 代替メソッド:例外を処理したくない場合は、pollFirst() メソッドの使用を検討できます
- addFirst() との組み合わせ:addFirst() メソッドと一緒に使用してスタック構造を実装することがよくあります
例
LinkedList<String> stack = new LinkedList<>();
stack.addFirst("First"); // スタックにプッシュ
stack.addFirst("Second"); // スタックにプッシュ
String top = stack.removeFirst(); // スタックからポップ
stack.addFirst("First"); // スタックにプッシュ
stack.addFirst("Second"); // スタックにプッシュ
String top = stack.removeFirst(); // スタックからポップ
まとめ
LinkedList.removeFirst()removeFirst() は、リンクリストの最初の要素を削除して返す効率的なメソッドです。このメソッドの動作と例外を理解することは、LinkedList を正しく使用するために非常に重要です。実際の開発では、空のリンクリストを処理する必要があるかどうかに応じて、removeFirst() または pollFirst() メソッドを選択できます。
Java LinkedList