Rozdiely medzi Collection.clear () a Collection.removeAll ()

1. Prehľad

V tomto rýchlom návode sa dozvieme asi dve Zbierka metódy, ktoré sa môžu zdať, že robia to isté, ale nie sú: jasný() a odobrať všetky().

Najprv si pozrieme definície metód a potom ich použijeme v krátkych príkladoch.

2. Collection.clear ()

Najprv sa ponoríme do Collection.clear () metóda. Poďme skontrolovať javadoc metódy. Podľa nej účel jasný() je odstrániť všetky jednotlivé prvky zo zoznamu.

Takže v podstate volanie jasný() na ľubovoľnom zozname spôsobí, že bude zoznam prázdny.

3. Collection.removeAll ()

Teraz sa pozrieme na Javadoc z Collection.removeAll (). Vidíme, že metóda trvá a Zbierka ako argument. A jeho účelom jeodstrániť všetky spoločné prvky medzi zoznamom a zbierkou.

Pri volaní na kolekciu teda odstráni všetky prvky z odovzdaného argumentu, ktoré sa tiež nachádzajú v kolekcii, na ktorú voláme odobrať všetky().

4. Príklady

Pozrime sa teraz na nejaký kód, aby sme videli tieto metódy v akcii. Najskôr vytvoríme testovaciu triedu s názvom ClearVsRemoveAllUnitTest.

Potom vytvoríme prvý test pre Collection.clear ().

Inicializujeme zbierku Celé čísla s niekoľkými číslami a zavolajte jasný() tak, aby v zozname nezostal žiadny prvok:

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

Ako vidíme, zbierka je potom prázdna jasný() byť volaný.

Vytvorme druhý test s dvoma zbierkami, jednu s číslami od 1 do 5 a druhú s číslami od 3 do 7. Potom zavoláme odobrať všetky() na prvej kolekcii s druhou ako parametrom.

Očakávame, že v prvej kolekcii zostanú iba čísla 1 a 2 (zatiaľ čo druhá sa nezmenila):

@Test void whenRemoveAll_thenFirstListMissElementsFromSecondList () {Collection firstCollection = new ArrayList (Arrays.asList (1, 2, 3, 4, 5)); Zbierka secondCollection = nový 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); }

A naše očakávania sú splnené. V prvej kolekcii zostávajú iba čísla 1 a 2 a druhá sa nezmenila.

5. Záver

V tomto článku sme videli účely Collection.clear () a Collection.removeAll ().

Napriek tomu, čo by sme si na začiatku mohli myslieť, nerobia to isté. jasný() vymaže každý prvok zo zbierky a odobrať všetky() jeden odstráni iba prvky zodpovedajúce tým z iného Zbierka.

A ako vždy, kód nájdete na GitHub.