Java LinkedList peek() メソッド
peek()メソッドはJavaのLinkedListLinkedList クラスが提供する非常に便利なメソッドで、リンクリストの最初の要素(先頭要素)を取得しますが削除はしません。このメソッドはQueueQueue インターフェースの操作であり、LinkedListこのインターフェースを実装しています。
メソッドの構文:
public E peek()
戻り値:
- リンクリストが空でない場合、リンクリストの最初の要素を返します。
- リンクリストが空の場合、null を返します。
null
メソッドの特徴
非破壊的操作
peek()peek() メソッドはリンクリストの最初の要素を「確認」するだけで、リンクリストから削除しません。これはpoll() 或 remove()poll() メソッドとは異なり、後者は要素を削除します。
空安全
リンクリストが空の場合、peek()null を返し、null例外をスローしないため、特定のシナリオではgetFirst() 或 element()element() より安全です。
時間計算量
LinkedList はLinkedList双方向リンクリストに基づいて実装されているため、peek()peek() メソッドの時間計算量は O(1) です。先頭ノードにアクセスするだけでよいからです。
使用例
基本例
例
public class PeekExample {
public static void main(String[] args) {
LinkedList<String> fruits = new LinkedList<>();
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Cherry");
// peek() を使用して最初の要素を確認する
String firstFruit = fruits.peek();
System.out.println("First fruit: " + firstFruit); // 出力: First fruit: Apple
System.out.println("LinkedList after peek(): " + fruits); // 出力: [Apple, Banana, Cherry]
}
}
空のリンクリストの例
例
public class EmptyListPeek {
public static void main(String[] args) {
LinkedList<Integer> numbers = new LinkedList<>();
Integer firstNumber = numbers.peek();
System.out.println("First number: " + firstNumber); // 出力: First number: null
}
}
他の類似メソッドとの比較
peek() vs getFirst()
| メソッド | 空のリンクリストでの動作 | 例外をスロー |
|---|---|---|
| peek() | null を返す | 否 |
| getFirst() | NoSuchElementException をスロー | である |
4.2 peek() vs element()
| メソッド | 空のリンクリストでの動作 | 例外をスロー |
|---|---|---|
| peek() | null を返す | 否 |
| element() | NoSuchElementException をスロー | である |
4.3 peek() vs poll()
| メソッド | 要素を削除するかどうか | 空のリンクリストでの動作 |
|---|---|---|
| peek() | 否 | null を返す |
| poll() | である | null を返す |
実際の適用シーン
メッセージキューの処理
メッセージキューを処理する際、キューの先頭のメッセージを削除せずに確認する必要がよくあります:
例
// ... メッセージをキューに追加
// 最初のメッセージを確認するが削除しない
Message nextMessage = messageQueue.peek();
if (nextMessage != null && nextMessage.isHighPriority()) {
// 高優先度メッセージを処理
}
タスクスケジューリングシステム
タスクスケジューリングシステムでは、peek()peek() を使用して次に実行するタスクを確認できます:
例
// ... タスクをキューに追加
Task nextTask = taskQueue.peek();
if (nextTask != null && nextTask.isReadyToExecute()) {
// タスクを実行
}
ブラウザの履歴
ブラウザで最近アクセスしたページを履歴から削除せずに確認する操作をシミュレートします:
例
// ... アクセス記録を追加
String lastVisited = browserHistory.peek();
System.out.println("最近アクセスしたページ: " + lastVisited);
注意事項
null値の処理:peek() は
peek()null を返す可能性があるため、null戻り値を使用する前に null チェックを行い、NullPointerException を回避する必要があります。NullPointerException。並行環境::
LinkedListLinkedList はスレッドセーフではないため、マルチスレッド環境で使用する場合はpeek()、追加の同期措置が必要です。パフォーマンスの考慮:peek() 操作自体は
peek()O(1) ですが、頻繁に呼び出され他の操作を伴う場合は、より効率的なデータ構造を検討する必要があるかもしれません。スタック操作との比較:LinkedList を
LinkedListスタックとして使用する場合、peek()peek() は最初の要素(スタックの先頭)を確認します。これはStackStack クラスのpeek()peek() メソッドの動作と一致します。