Java
 Computer >> コンピューター >  >> プログラミング >> Java

JavaのArrayList.clear()とremoveAll()の違いを徹底解説

JavaのArrayListクラスは、Listインターフェースの可変長配列(リサイズ可能な配列)実装であり、null値の格納も許容しています。

このクラスには要素を削除するためのメソッドとしてclear()removeAll()が用意されています。どちらもリストから要素を取り除く点では共通していますが、動作内容には明確な違いがあります。本記事では、それぞれの使い方とサンプルコードを交えながら違いを解説します。

clear()メソッドとは

clear()メソッドは、現在のListオブジェクトからすべての要素を一括で削除します。引数を受け取らず、呼び出すだけでリストが空の状態になります。

サンプルコード

import java.util.ArrayList;
public class ClearExample {
    public static void main(String[] args){
        // ArrayListオブジェクトの生成
        ArrayList<String> list = new ArrayList<String>();
        list.add("JavaFX");
        list.add("Java");
        list.add("WebGL");
        list.add("OpenCV");
        list.add("Impala");
        System.out.println("ArrayListの内容: \n" + list);
        // 全要素を削除
        list.clear();
        System.out.println("clear()実行後のArrayListの内容: " + list);
    }
}

実行結果

ArrayListの内容:
[JavaFX, Java, WebGL, OpenCV, Impala]
clear()実行後のArrayListの内容: []

removeAll()メソッドとは

removeAll()メソッドは、別のコレクションオブジェクトを引数として受け取り、そのコレクションに含まれるすべての要素を現在のArrayListから削除します。つまり、リスト全体ではなく、指定した要素群との差分だけを残すことができます。

サンプルコード

import java.util.ArrayList;
public class ClearExample {
    public static void main(String[] args){
        // ArrayListオブジェクトの生成
        ArrayList<String> list1 = new ArrayList<String>();
        list1.add("JavaFX");
        list1.add("Java");
        list1.add("WebGL");
        list1.add("OpenCV");
        list1.add("OpenNLP");
        list1.add("JOGL");
        list1.add("Hadoop");
        list1.add("HBase");
        list1.add("Flume");
        list1.add("Mahout");
        list1.add("Impala");
        System.out.println("ArrayList1の内容: \n" + list1);

        ArrayList<String> list2 = new ArrayList<String>();
        list2.add("JOGL");
        list2.add("Hadoop");
        list2.add("HBase");
        list2.add("Flume");
        list2.add("Mahout");
        list2.add("Impala");
        System.out.println("ArrayList2の内容: \n" + list2);

        // list2に含まれる要素をlist1から削除
        list1.removeAll(list2);
        System.out.println("削除後のArrayListの内容: \n" + list1);
    }
}

実行結果

ArrayList1の内容:
[JavaFX, Java, WebGL, OpenCV, OpenNLP, JOGL, Hadoop, HBase, Flume, Mahout, Impala]
ArrayList2の内容:
[JOGL, Hadoop, HBase, Flume, Mahout, Impala]
削除後のArrayListの内容:
[JavaFX, Java, WebGL, OpenCV, OpenNLP]

clear()とremoveAll()の違いまとめ

比較項目clear()removeAll()
削除範囲リスト内のすべての要素引数のコレクションに含まれる要素のみ
引数不要Collectionオブジェクトが必要
主な用途リストを完全に初期化したい場合特定の要素群だけを除外したい場合

このように、リストを丸ごと空にしたい場合はclear()、特定の要素だけを取り除きたい場合はremoveAll()を使い分けるのが基本です。用途に応じて適切なメソッドを選択しましょう。

  1. JavaでのArrayListとHashSetの違いを徹底解説!使い分けのポイントも紹介

    HashSetとArrayListは、どちらもJavaコレクションフレームワークにおいて最も重要なクラスの一つです。それぞれ特徴が異なるため、用途に応じた適切な使い分けが求められます。本記事では、ArrayListとHashSetの主な違いを6つの観点から比較し、実際のサンプルコードとともにわかりやすく解説します。ArrayListとHashSetの違い一覧No.項目ArrayListHashSet1実装インターフェースListインターフェースを実装しています。Setインターフェースを実装しています。2内部構造内部的には配列(動的配列)を使って実装されています。内部的にはHashMapを使って

  2. JavaのArrayListとCopyOnWriteArrayListの違いを徹底解説

    Javaにおいて、ArrayListとCopyOnWriteArrayListはどちらもListインターフェースの実装クラスですが、それぞれに重要な違いがあります。本記事では、両者の主な相違点を比較表とサンプルコードを交えてわかりやすく解説します。ArrayListとCopyOnWriteArrayListの主な違いNo.項目ArrayListCopyOnWriteArrayList1同期(スレッドセーフ性)非同期であり、複数スレッドからの同時アクセスは保証されません。同期化されており、ある時点でオブジェクトにアクセスできるのは1つのスレッドのみです。2パフォーマンス同期処理が不要なため、動作