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.