Java LinkedList peekFirst() メソッド
peekFirst()メソッドは Java のLinkedListクラスが提供する実用的なメソッドで、リンクリストの最初の要素を削除せずに取得します。リンクリストが空の場合は、null を返しますnull。
メソッド構文
public E peekFirst()
メソッドの特徴
- 非破壊的操作:
pollFirst()或removeFirst()とは異なり、peekFirst()リンクリストの内容を変更しません - 高速アクセス:LinkedList が先頭ノードの参照を直接保持しているため、時間計算量は O(1) です
- 安全なアクセス:リンクリストが空の場合は null を返し
null、例外をスローしません
使用シーン
peekFirst()このメソッドは特に以下の場合に適しています:
- キューの先頭要素を確認したいが、削除したくない場合
- キューを消費する前に、次に処理する要素を確認する場合
- 監視機能やログ記録機能を実装する場合
コード例
基本使用例
例
import java.util.LinkedList;
public class PeekFirstExample {
public static void main(String[] args) {
LinkedList<String> fruits = new LinkedList<>();
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Cherry");
// 最初の要素を確認するが削除しない
String firstFruit = fruits.peekFirst();
System.out.println("First fruit: " + firstFruit); // 出力: First fruit: Apple
System.out.println("LinkedList after peek: " + fruits); // 出力: [Apple, Banana, Cherry]
}
}
public class PeekFirstExample {
public static void main(String[] args) {
LinkedList<String> fruits = new LinkedList<>();
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Cherry");
// 最初の要素を確認するが削除しない
String firstFruit = fruits.peekFirst();
System.out.println("First fruit: " + firstFruit); // 出力: First fruit: Apple
System.out.println("LinkedList after peek: " + fruits); // 出力: [Apple, Banana, Cherry]
}
}
空のリンクリスト処理例
例
import java.util.LinkedList;
public class EmptyListExample {
public static void main(String[] args) {
LinkedList<Integer> numbers = new LinkedList<>();
// 空のリンクリストを安全に処理する
Integer firstNumber = numbers.peekFirst();
if (firstNumber == null) {
System.out.println("The list is empty");
} else {
System.out.println("First number: " + firstNumber);
}
}
}
public class EmptyListExample {
public static void main(String[] args) {
LinkedList<Integer> numbers = new LinkedList<>();
// 空のリンクリストを安全に処理する
Integer firstNumber = numbers.peekFirst();
if (firstNumber == null) {
System.out.println("The list is empty");
} else {
System.out.println("First number: " + firstNumber);
}
}
}
他の類似メソッドとの比較
| メソッド名 | 機能 | リンクリストが空の場合の動作 | リンクリストを変更するか |
|---|---|---|---|
peekFirst() |
最初の要素を確認する | null を返すnull |
否 |
getFirst() |
最初の要素を取得する | 例外をスローするNoSuchElementException |
否 |
pollFirst() |
最初の要素を削除して返す | null を返すnull |
である |
removeFirst() |
最初の要素を削除して返す | 例外をスローするNoSuchElementException |
である |
ベストプラクティス
- リンクリストが空かどうか不明な場合は、優先して
peekFirst()ではなくgetFirst() - 要素の確認と削除を同時に行う必要がある場合は、
pollFirst()を使用して効率を向上させることができます - 並行環境で
peekFirst()を使用する場合は、追加の同期対策が必要です
よくある質問(FAQ)
Q1: peekFirst()とpeek()違いは何ですか?
peek()とpeekFirst()LinkedList では機能は完全に同じで、peek()Queue インターフェースとの一貫性を保つために提供されています。
Q2: なぜpeekFirst()null を返しnull、例外をスローしないのですか?
この設計により、空のリンクリストをより柔軟に処理でき、特にキューの操作シーンに適しており、追加の例外処理コードを回避できます。
Q3: マルチスレッド環境でpeekFirst()を使用しても安全ですか?
LinkedList はスレッドセーフではありません。マルチスレッド環境で使用する必要がある場合は、Collections.synchronizedList()でラップするか、ConcurrentLinkedDeque。