Diferencias entre Collection.clear () y Collection.removeAll ()

1. Información general

En este tutorial rápido, aprenderemos sobre dos métodos de colección que pueden parecer hacer lo mismo, pero no lo son: clear () y removeAll () .

Primero veremos las definiciones del método y luego las usaremos en ejemplos cortos.

2. Collection.clear ()

Primero nos sumergiremos en el método Collection.clear () . Comprobemos el Javadoc del método. Según él, el propósito de clear () es eliminar todos los elementos de la lista.

Entonces, básicamente, llamar a clear () en cualquier lista resultará en que la lista quede vacía.

3. Collection.removeAll ()

Ahora veremos el Javadoc de Collection.removeAll () . Podemos ver que el método toma una colección como argumento. Y su propósito es eliminar todos los elementos comunes entre la lista y la colección.

Entonces, al llamarlo en una colección, eliminará todos los elementos del argumento pasado que también están en la colección en la que llamamos removeAll () .

4. Ejemplos

Veamos ahora algo de código para ver esos métodos en acción. Primero crearemos una clase de prueba con el nombre ClearVsRemoveAllUnitTest .

Después de eso, crearemos una primera prueba para Collection.clear () .

Inicializaremos una colección de enteros con algunos números y llamaremos a clear () para que no quede ningún elemento en la lista:

@Test void whenClear_thenListBecomesEmpty() { Collection collection = new ArrayList(Arrays.asList(1, 2, 3, 4, 5)); collection.clear(); assertTrue(collection.isEmpty()); }

Como podemos ver, la colección está vacía después de llamar a clear () .

Creemos una segunda prueba con dos colecciones, una con números del 1 al 5 y la otra con números del 3 al 7. Después de eso, llamaremos removeAll () en la primera colección con la segunda como parámetro.

Esperamos que solo los números 1 y 2 permanezcan en la primera colección (mientras que la segunda no ha cambiado):

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

Y nuestras expectativas se cumplen. Solo los números 1 y 2 permanecen en la primera colección y la segunda no se ha cambiado.

5. Conclusión

En este artículo, hemos visto los propósitos de Collection.clear () y Collection.removeAll () .

A pesar de lo que podamos pensar al principio, no están haciendo lo mismo. clear () elimina todos los elementos de la colección y removeAll () uno solo elimina los elementos que coinciden con los de otra colección .

Y, como siempre, el código se puede encontrar en GitHub.