1. 概要

このクイックチュートリアルでは、同じことをするように見えるかもしれないが、そうではない2つの Collection メソッドについて学習します: clear() removeAll()

最初にメソッド定義を確認してから、短い例でそれらを使用します。

2. Collection.clear()

まず、 Collection.clear()メソッドについて詳しく説明します。 メソッドのJavadocを確認してみましょう。 それによると、 clear()の目的は、リストからすべての要素を削除することです。

したがって、基本的に、任意のリストで clear()を呼び出すと、リストは空になります。

3. Collection.removeAll()

次に、 Collection.removeAll()Javadocを見ていきます。 メソッドがCollectionを引数として取ることがわかります。 そしてその目的はリストとコレクションの間のすべての共通要素を削除することです。

したがって、コレクションで呼び出すと、 removeAll()を呼び出すコレクションにもある渡された引数からすべての要素が削除されます。

4. 例

これらのメソッドが実際に動作していることを確認するために、いくつかのコードを見てみましょう。 まず、ClearVsRemoveAllUnitTestという名前のテストクラスを作成します。

その後、 Collection.clear()の最初のテストを作成します。

Integers のコレクションをいくつかの数値で初期化し、その上で clear()を呼び出して、リストに要素が残らないようにします。

@Test
void whenClear_thenListBecomesEmpty() {
    Collection<Integer> collection = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));

    collection.clear();

    assertTrue(collection.isEmpty());
}

ご覧のとおり、 clear()が呼び出された後、コレクションは空になります。

2つのコレクションを使用して2番目のテストを作成しましょう。1つは1から5までの番号で、もう1つは3から7までの番号です。 その後、最初のコレクションで removeAll()を呼び出し、2番目のコレクションをパラメーターとして使用します。

最初のコレクションには1と2の数字だけが残ると予想されます(2番目のコレクションは変更されていません)。

@Test
void whenRemoveAll_thenFirstListMissElementsFromSecondList() {
    Collection<Integer> firstCollection = new ArrayList<>(
      Arrays.asList(1, 2, 3, 4, 5));
    Collection<Integer> secondCollection = new ArrayList<>(
      Arrays.asList(3, 4, 5, 6, 7));

    firstCollection.removeAll(secondCollection);

    assertEquals(
      Arrays.asList(1, 2), 
      firstCollection);
    assertEquals(
      Arrays.asList(3, 4, 5, 6, 7), 
      secondCollection);
}

そして、私たちの期待は満たされています。 最初のコレクションには1と2の番号のみが残っており、2番目のコレクションは変更されていません。

5. 結論

この記事では、 Collection.clear()および Collection.removeAll()の目的について説明しました。

私たちが最初に考えるかもしれないことにもかかわらず、彼らは同じことをしていません。 clear()はコレクションからすべての要素を削除し、 removeAll()は別のCollectionの要素と一致する要素のみを削除します。

そして、いつものように、コードはGitHubにあります。