Ce face Collection.retainAll
a.retainAll(b) șterge din a tot ce nu apare în b. Ce rămâne este partea comună (intersecția). Returnează true dacă a s-a modificat.
a.containsAll(b) nu modifică nimic: returnează true dacă fiecare element din b se găsește în a. Ordinea și numărul de apariții nu contează. Pentru o colecție b goală, rezultatul este mereu true.
Ambele compară elementele cu equals. Pentru colecții mari, e mai rapid ca colecția în care se caută (b la retainAll, a la containsAll) să fie un HashSet.
Parametri
| Parametru | Descriere |
|---|---|
c |
Colecția cu care se compară. |
Ce returnează
retainAll: true dacă s-a schimbat colecția. containsAll: true dacă le conține pe toate.
Exemple
Exemplul 1: Ingredientele comune a două rețete
import java.util.List;
import java.util.TreeSet;
public class Main {
public static void main(String[] args) {
TreeSet<String> clatite = new TreeSet<>(List.of("făină", "ouă", "lapte", "zahăr"));
List<String> cozonac = List.of("făină", "drojdie", "lapte", "zahăr", "nuci");
TreeSet<String> comune = new TreeSet<>(clatite);
boolean schimbat = comune.retainAll(cozonac);
System.out.println(schimbat + " " + comune);
System.out.println("Clătitele au rămas: " + clatite);
}
}
Rezultat
true [făină, lapte, zahăr]
Clătitele au rămas: [făină, lapte, ouă, zahăr]
Exemplul 2: Am tot ce trebuie pentru rețetă? (containsAll)
import java.util.List;
import java.util.Set;
public class Main {
public static void main(String[] args) {
Set<String> camara = Set.of("făină", "ouă", "lapte", "sare");
List<String> omleta = List.of("ouă", "lapte", "sare");
List<String> tort = List.of("ouă", "făină", "ciocolată");
System.out.println("Omletă: " + camara.containsAll(omleta));
System.out.println("Tort: " + camara.containsAll(tort));
System.out.println("Nimic: " + camara.containsAll(List.of()));
}
}
Rezultat
Omletă: true
Tort: false
Nimic: true
Greșeli frecvente
- Folosești
retainAllpe colecția originală când mai ai nevoie de ea. Lucrează pe o copie. - Crezi că
containsAllnumără aparițiile:List.of("a").containsAll(List.of("a", "a"))estetrue.
Comenzi înrudite
List.removeAll: removeAll șterge toate elementele care apar în altă colecție; retainAll le păstrează doar pe acestea.List.contains: Verifică dacă lista conține o valoare (contains) sau toate valorile altei colecții (containsAll).Set.remove: remove scoate un element; removeAll face diferența a două mulțimi, retainAll intersecția. Toate spun dacă s-a schimbat ceva.Set.contains: contains verifică rapid dacă un element este în mulțime; containsAll verifică dacă sunt toate elementele altei colecții.Collection.addAll: Adaugă în colecție toate elementele altei colecții. Returnează true dacă s-a schimbat ceva.