Unterschiede zwischen Collection.clear () und Collection.removeAll ()

Unterschiede zwischen Collection.clear () und Collection.removeAll ()

1. Überblick

In diesem kurzen Tutorial lernen wir zweiCollection-Methoden kennen, die anscheinend dasselbe tun, aber nicht:clear() undremoveAll().

Wir werden zuerst die Methodendefinitionen sehen und sie dann in kurzen Beispielen verwenden.

2. Collection.clear()

Wir werden zunächst auf dieCollection.clear()-Methode eingehen. Überprüfen wirthe Javadoc of the method. Demnachthe purpose of clear() is to remove every single element from the list.

Wenn Sie alsoclear() in einer beliebigen Liste aufrufen, wird die Liste leer.

3. Collection.removeAll()

Wir werden uns nun dieJavadoc vonCollection.removeAll() ansehen. Wir können sehen, dass die MethodeCollection als Argument verwendet. And its purpose is toremove all common elements between the list and the collection.

Wenn Sie es für eine Sammlung aufrufen, werden alle Elemente aus dem übergebenen Argument entfernt, die sich auch in der Sammlung befinden, für die wirremoveAll() aufrufen.

4. Beispiele

Schauen wir uns nun einen Code an, um diese Methoden in Aktion zu sehen. Wir erstellen zunächst eine Testklasse mit dem NamenClearVsRemoveAllUnitTest.

Danach erstellen wir einen ersten Test fürCollection.clear().

Wir werden eine Sammlung vonIntegers mit einigen Zahlen initialisieren undclear() darauf aufrufen, damit kein Element in der Liste verbleibt:

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

    collection.clear();

    assertTrue(collection.isEmpty());
}

Wie wir sehen können, ist die Sammlung nach dem Aufruf vonclear() leer.

Erstellen wir einen zweiten Test mit zwei Sammlungen, eine mit Zahlen von 1 bis 5 und die andere mit Zahlen von 3 bis 7. Danach rufen wirremoveAll() in der ersten Sammlung mit der zweiten als Parameter auf.

Wir erwarten, dass nur die Nummern 1 und 2 in der ersten Sammlung verbleiben (während die zweite unverändert bleibt):

@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);
}

Und unsere Erwartungen werden erfüllt. In der ersten Sammlung verbleiben nur die Nummern 1 und 2, und die zweite wurde nicht geändert.

5. Fazit

In diesem Artikel haben wir die Zwecke vonCollection.clear() undCollection.removeAll() gesehen.

Ungeachtet dessen, was wir zunächst denken, tun sie nicht dasselbe. clear() löscht jedes Element aus der Sammlung undremoveAll() entfernt nur die Elemente, die mit denen eines anderenCollection übereinstimmen.

Und wie immer kann der Codeover on GitHub gefunden werden.