Java LinkedList clear() メソッド

Java LinkedList Java LinkedList


clear()メソッドは Java のLinkedListクラスが提供する一般的なメソッドで、リンクリスト内のすべての要素を削除するために使用されます。このメソッドを呼び出すと、リンクリストは空のリストになります。

メソッド構文

public void clear()

メソッドの機能

clear()メソッドの主な機能は次のとおりです:

  1. 削除LinkedList内のすべての要素
  2. リンクリストのサイズ(size)を 0 にリセットします
  3. リンクリストの容量(capacity)には影響しません。なぜならLinkedList容量制限がないからです

使用例

基本的な使い方

例

import java.util.LinkedList;

public class ClearExample {
    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);
        System.out.println("クリア前のサイズ: " + fruits.size());
       
        // clear() メソッドを使用してリンクリストをクリアする
        fruits.clear();
       
        System.out.println("クリア後のリンクリスト: " + fruits);
        System.out.println("クリア後のサイズ: " + fruits.size());
    }
}

出力結果:

清空前的链表: [Apple, Banana, Cherry]
清空前的大小: 3
清空后的链表: []
清空后的大小: 0

実装原理

Java のLinkedList実装では、clear()メソッドは次の手順で動作します:

  1. リンクリスト内のすべてのノードを走査します
  2. 各ノードの先行ノードと後続ノードの参照を null に設定します
  3. リンクリストの先頭ノード(first)と末尾ノード(last)を null に設定します
  4. リンクリストのサイズ(size)を 0 に設定します

この実装方法は、ガベージコレクタが不要になったノードオブジェクトを回収するのに役立ちます。


メソッドの特徴

  1. 時間計算量:O(n) - すべてのノードを走査する必要があります
  2. 空間計算量:O(1) - 追加のストレージスペースは不要です
  3. スレッドセーフ:スレッドセーフではありません。マルチスレッド環境では外部同期が必要です
  4. 戻り値:なし(void)

注意事項

  1. 呼び出しclear()後、リンクリスト内のすべての要素が削除され、元に戻すことはできません
  2. リンクリストが複数の参照で共有されている場合、すべての参照がリンクリストがクリアされた状態を確認します
  3. リンクリストをクリアした後も、新しい要素を追加し続けることができます
  4. とnew LinkedList<>()新しいインスタンスを作成する場合とは異なり、clear()メソッドは既存のオブジェクトを再利用します

他のメソッドとの比較

メソッド 機能 時間計算量 元のリンクリストを変更するかどうか
clear() すべての要素をクリアする O(n) である
removeAll() 指定されたコレクション内のすべての要素を削除する O(n*m) である
new LinkedList<>() 新しい空のリンクリストを作成する O(1) 否

実際の適用シナリオ

clear()メソッドは以下のシナリオで特に役立ちます:

  1. リンクリストオブジェクトの再利用:同じリンクリストオブジェクトを繰り返し使用する必要がある場合
  2. メモリ管理:リンクリストが占有しているメモリを解放する必要がある場合
  3. 状態のリセット:アルゴリズムやデータ処理の過程でリンクリストの状態をリセットする必要がある場合

例

// 実際の応用例:バッチデータの処理
LinkedList<Data> dataBuffer = new LinkedList<>();

// 第1段階:データを収集する
collectData(dataBuffer);

// データを処理する
processData(dataBuffer);

// バッファをクリアして次のバッチのデータを準備する
dataBuffer.clear();

// 第2段階:新しいデータを収集する
collectData(dataBuffer);

適切に使用することでclear()メソッドは、コードの効率と可読性を向上させることができます。

Java LinkedList Java LinkedList

その他の拡張