Différences entre Collection.clear () et Collection.removeAll ()

Différences entre Collection.clear () et Collection.removeAll ()

1. Vue d'ensemble

Dans ce rapide didacticiel, nous allons découvrir deux méthodesCollection qui semblent faire la même chose, mais qui ne sont pas:clear() etremoveAll().

Nous allons d'abord voir les définitions de méthode, puis les utiliser dans de courts exemples.

2. Collection.clear()

Nous allons d'abord nous plonger dans la méthodeCollection.clear(). Vérifionsthe Javadoc of the method. Selon lui,the purpose of clear() is to remove every single element from the list.

Donc, fondamentalement, appelerclear() sur n'importe quelle liste entraînera le fait que la liste devienne vide.

3. Collection.removeAll()

Nous allons maintenant examiner lesJavadoc deCollection.removeAll(). Nous pouvons voir que la méthode prend unCollection comme argument. And its purpose is toremove all common elements between the list and the collection.

Ainsi, en l'appelant sur une collection, cela supprimera tous les éléments de l'argument passé qui sont également dans la collection sur laquelle nous appelonsremoveAll().

4. Exemples

Examinons maintenant du code pour voir ces méthodes en action. Nous allons d'abord créer une classe de test avec le nomClearVsRemoveAllUnitTest.

Ensuite, nous allons créer un premier test pourCollection.clear().

Nous allons initialiser une collection deIntegers avec quelques nombres et appelerclear() dessus afin qu'aucun élément ne reste dans la liste:

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

    collection.clear();

    assertTrue(collection.isEmpty());
}

Comme nous pouvons le voir, la collection est vide après l'appel declear().

Créons un deuxième test avec deux collections, l’une avec des nombres de 1 à 5 et l’autre avec des nombres de 3 à 7. Après cela, nous appelleronsremoveAll() sur la première collection avec la seconde comme paramètre.

Nous nous attendons à ce que seuls les nombres 1 et 2 restent dans la première collection (tandis que la seconde reste inchangée):

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

Et nos attentes sont satisfaites. Seuls les numéros 1 et 2 restent dans la première collection et la seconde n'a pas été modifiée.

5. Conclusion

Dans cet article, nous avons vu les objectifs deCollection.clear() etCollection.removeAll().

Malgré ce que nous pourrions penser au début, ils ne font pas la même chose. clear() supprime tous les éléments de la collection etremoveAll() one supprime uniquement les éléments correspondant à ceux d'un autreCollection.

Et, comme toujours, le code peut être trouvéover on GitHub.