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

1概要

このクイックチュートリアルでは、同じことをする可能性があるが、 clear() removeAll() という2つの Collection メソッドについて学びます。

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

2. Collection.clear()

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

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

3. Collection.removeAll()

Collection.removeAllのhttps://docs.oracle.com/javase/9​​/docs/api/java/util/Collection.html#removeAll-java.util.Collection-[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() を呼び出します。

最初のコレクションには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() oneは他の Collection から一致する要素のみを削除します。

そして、いつものように、コードはhttps://github.com/eugenp/tutorials/tree/master/core-java-collections[over on GitHub]にあります。