Collection.clear()とCollection.removeAll()の違い

Collection.clear()とCollection.removeAll()の違い

1. 概要

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

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

2. Collection.clear()

まず、Collection.clear()メソッドについて詳しく説明します。 the Javadoc of the methodを確認しましょう。 それによると、the purpose of clear() is to remove every single element from the list.

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

3. Collection.removeAll()

次に、Collection.removeAll()Javadocを見てみましょう。 メソッドが引数としてCollectionをとっていることがわかります。 And its purpose is toremove all common elements between the list and the collection.

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

4. 例

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

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

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

@Test
void whenClear_thenListBecomesEmpty() {
    Collection 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 firstCollection = new ArrayList<>(
      Arrays.asList(1, 2, 3, 4, 5));
    Collection 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の要素と一致する要素のみを削除します。

そして、いつものように、コードはover on GitHubで見つけることができます。