Differenze tra Collection.clear () e Collection.removeAll ()

1. Panoramica

In questo breve tutorial, impareremo a conoscere due metodi Collection che potrebbero sembrare fare la stessa cosa, ma non lo sono: clear () e removeAll () .

Vedremo prima le definizioni dei metodi e poi le useremo in brevi esempi.

2. Collection.clear ()

Prima ci immergeremo nel metodo Collection.clear () . Controlliamo il Javadoc del metodo. Secondo esso, lo scopo di clear () è rimuovere ogni singolo elemento dall'elenco.

Quindi, fondamentalmente, chiamando clear () su qualsiasi elenco, l'elenco diventerà vuoto.

3. Collection.removeAll ()

Ora daremo uno sguardo al Javadoc di Collection.removeAll () . Possiamo vedere che il metodo accetta una Collection come argomento. E il suo scopo è rimuovere tutti gli elementi comuni tra l'elenco e la raccolta.

Quindi, quando viene chiamato su una raccolta, rimuoverà tutti gli elementi dall'argomento passato che sono anche nella raccolta su cui chiamiamo removeAll () .

4. Esempi

Diamo ora un'occhiata al codice per vedere questi metodi in azione. Creeremo prima una classe di test con il nome ClearVsRemoveAllUnitTest .

Successivamente, creeremo un primo test per Collection.clear () .

Inizializzeremo una raccolta di numeri interi con pochi numeri e chiameremo clear () su di essa in modo che nessun elemento rimanga nell'elenco:

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

Come possiamo vedere, la raccolta è vuota dopo che è stata chiamata clear () .

Creiamo un secondo test con due raccolte, una con numeri da 1 a 5 e l'altra con numeri da 3 a 7. Dopodiché, chiameremo removeAll () sulla prima raccolta con la seconda come parametro.

Ci aspettiamo che solo i numeri 1 e 2 rimangano nella prima raccolta (mentre la seconda è invariata):

@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 le nostre aspettative sono soddisfatte. Solo i numeri 1 e 2 sono rimasti nella prima raccolta e la seconda non è stata modificata.

5. conclusione

In questo articolo, abbiamo visto gli scopi di Collection.clear () e Collection.removeAll () .

Nonostante quello che potremmo pensare all'inizio, non stanno facendo la stessa cosa. clear () cancella ogni elemento dalla collezione e removeAll () one rimuove solo gli elementi che corrispondono a quelli di un'altra collezione .

E, come sempre, il codice può essere trovato su GitHub.