Java LinkedList peekFirst() メソッド

Java LinkedList


peekFirst()メソッドは Java のLinkedListクラスが提供する実用的なメソッドで、リンクリストの最初の要素を削除せずに取得します。リンクリストが空の場合は、null を返しますnull。

メソッド構文

public E peekFirst()

メソッドの特徴

  1. 非破壊的操作:pollFirst() 或 removeFirst()とは異なり、peekFirst()リンクリストの内容を変更しません
  2. 高速アクセス:LinkedList が先頭ノードの参照を直接保持しているため、時間計算量は O(1) です
  3. 安全なアクセス:リンクリストが空の場合は null を返しnull、例外をスローしません

使用シーン

peekFirst()このメソッドは特に以下の場合に適しています:

  1. キューの先頭要素を確認したいが、削除したくない場合
  2. キューを消費する前に、次に処理する要素を確認する場合
  3. 監視機能やログ記録機能を実装する場合

コード例

基本使用例

例

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

空のリンクリスト処理例

例

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);
        }
    }
}

他の類似メソッドとの比較

メソッド名 機能 リンクリストが空の場合の動作 リンクリストを変更するか
peekFirst() 最初の要素を確認する null を返すnull 否
getFirst() 最初の要素を取得する 例外をスローするNoSuchElementException 否
pollFirst() 最初の要素を削除して返す null を返すnull である
removeFirst() 最初の要素を削除して返す 例外をスローするNoSuchElementException である

ベストプラクティス

  1. リンクリストが空かどうか不明な場合は、優先してpeekFirst()ではなくgetFirst()
  2. 要素の確認と削除を同時に行う必要がある場合は、pollFirst()を使用して効率を向上させることができます
  3. 並行環境でpeekFirst()を使用する場合は、追加の同期対策が必要です

よくある質問(FAQ)

Q1: peekFirst()とpeek()違いは何ですか?

peek()とpeekFirst()LinkedList では機能は完全に同じで、peek()Queue インターフェースとの一貫性を保つために提供されています。

Q2: なぜpeekFirst()null を返しnull、例外をスローしないのですか?

この設計により、空のリンクリストをより柔軟に処理でき、特にキューの操作シーンに適しており、追加の例外処理コードを回避できます。

Q3: マルチスレッド環境でpeekFirst()を使用しても安全ですか?

LinkedList はスレッドセーフではありません。マルチスレッド環境で使用する必要がある場合は、Collections.synchronizedList()でラップするか、ConcurrentLinkedDeque。

Java LinkedList

他の拡張クラスへの変更を検討してください