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()を使い分けるのが基本です。用途に応じて適切なメソッドを選択しましょう。
-
JavaでのArrayListとHashSetの違いを徹底解説!使い分けのポイントも紹介
HashSetとArrayListは、どちらもJavaコレクションフレームワークにおいて最も重要なクラスの一つです。それぞれ特徴が異なるため、用途に応じた適切な使い分けが求められます。本記事では、ArrayListとHashSetの主な違いを6つの観点から比較し、実際のサンプルコードとともにわかりやすく解説します。ArrayListとHashSetの違い一覧No.項目ArrayListHashSet1実装インターフェースListインターフェースを実装しています。Setインターフェースを実装しています。2内部構造内部的には配列(動的配列)を使って実装されています。内部的にはHashMapを使って
-
JavaのArrayListとCopyOnWriteArrayListの違いを徹底解説
Javaにおいて、ArrayListとCopyOnWriteArrayListはどちらもListインターフェースの実装クラスですが、それぞれに重要な違いがあります。本記事では、両者の主な相違点を比較表とサンプルコードを交えてわかりやすく解説します。ArrayListとCopyOnWriteArrayListの主な違いNo.項目ArrayListCopyOnWriteArrayList1同期(スレッドセーフ性)非同期であり、複数スレッドからの同時アクセスは保証されません。同期化されており、ある時点でオブジェクトにアクセスできるのは1つのスレッドのみです。2パフォーマンス同期処理が不要なため、動作