Java LinkedList peek() メソッド

Java LinkedList


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) です。先頭ノードにアクセスするだけでよいからです。


使用例

基本例

例

import java.util.LinkedList;

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]
    }
}

空のリンクリストの例

例

import java.util.LinkedList;

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 を返す

実際の適用シーン

メッセージキューの処理

メッセージキューを処理する際、キューの先頭のメッセージを削除せずに確認する必要がよくあります:

例

LinkedList<Message> messageQueue = new LinkedList<>();
// ... メッセージをキューに追加

// 最初のメッセージを確認するが削除しない
Message nextMessage = messageQueue.peek();
if (nextMessage != null && nextMessage.isHighPriority()) {
    // 高優先度メッセージを処理
}

タスクスケジューリングシステム

タスクスケジューリングシステムでは、peek()peek() を使用して次に実行するタスクを確認できます:

例

LinkedList<Task> taskQueue = new LinkedList<>();
// ... タスクをキューに追加

Task nextTask = taskQueue.peek();
if (nextTask != null && nextTask.isReadyToExecute()) {
    // タスクを実行
}

ブラウザの履歴

ブラウザで最近アクセスしたページを履歴から削除せずに確認する操作をシミュレートします:

例

LinkedList<String> browserHistory = new LinkedList<>();
// ... アクセス記録を追加

String lastVisited = browserHistory.peek();
System.out.println("最近アクセスしたページ: " + lastVisited);

注意事項

  1. null値の処理:peek() はpeek()null を返す可能性があるため、null戻り値を使用する前に null チェックを行い、NullPointerException を回避する必要があります。NullPointerException。

  2. 並行環境::LinkedListLinkedList はスレッドセーフではないため、マルチスレッド環境で使用する場合はpeek()、追加の同期措置が必要です。

  3. パフォーマンスの考慮:peek() 操作自体はpeek()O(1) ですが、頻繁に呼び出され他の操作を伴う場合は、より効率的なデータ構造を検討する必要があるかもしれません。

  4. スタック操作との比較:LinkedList をLinkedListスタックとして使用する場合、peek()peek() は最初の要素(スタックの先頭)を確認します。これはStackStack クラスのpeek()peek() メソッドの動作と一致します。

Java LinkedList

その他の拡張