Diferenças entre Collection.clear () e Collection.removeAll ()

Diferenças entre Collection.clear () e Collection.removeAll ()

1. Visão geral

Neste tutorial rápido, aprenderemos sobre dois métodosCollection que podem parecer fazer a mesma coisa, mas não são:clear()eremoveAll().

Veremos primeiro as definições de método e depois as usaremos em exemplos curtos.

2. Collection.clear()

Vamos primeiro mergulhar no métodoCollection.clear(). Vamos verificarthe Javadoc of the method. De acordo com ele,the purpose of clear() is to remove every single element from the list.

Então, basicamente, chamarclear() em qualquer lista fará com que a lista fique vazia.

3. Collection.removeAll()

Vamos agora dar uma olhada emJavadoc deCollection.removeAll(). Podemos ver que o método levaCollection como argumento. And its purpose is toremove all common elements between the list and the collection.

Portanto, ao chamá-lo em uma coleção, ele removerá todos os elementos do argumento passado que também estão na coleção na qual chamamosremoveAll().

4. Exemplos

Vamos agora dar uma olhada em alguns códigos para ver esses métodos em ação. Primeiro, criaremos uma classe de teste com o nomeClearVsRemoveAllUnitTest.

Depois disso, criaremos um primeiro teste paraCollection.clear().

Inicializaremos uma coleção deIntegers com alguns números e chamaremosclear() para que nenhum elemento permaneça na lista:

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

    collection.clear();

    assertTrue(collection.isEmpty());
}

Como podemos ver, a coleção está vazia após a chamada declear().

Vamos criar um segundo teste com duas coleções, uma com números de 1 a 5 e outra com números de 3 a 7. Depois disso, chamaremosremoveAll() na primeira coleção com a segunda como parâmetro.

Esperamos que apenas os números 1 e 2 permaneçam na primeira coleção (enquanto a segunda permanece inalterada):

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

E nossas expectativas são atendidas. Apenas os números 1 e 2 permanecem na primeira coleção e a segunda não foi alterada.

5. Conclusão

Neste artigo, vimos os objetivos deCollection.clear() eCollection.removeAll().

Apesar do que possamos pensar a princípio, eles não estão fazendo a mesma coisa. clear() exclui todos os elementos da coleção eremoveAll() remove apenas os elementos correspondentes aos de outroCollection.

E, como sempre, o código pode ser encontradoover on GitHub.