Ce face Collection
Collection este „părintele” comun al colecțiilor din java.util: List, Set, Queue și Deque o extind. Ea definește operațiile pe care le are orice grup de elemente: adăugare (add), ștergere (remove), căutare (contains), numărare (size), golire (clear), plus operațiile în masă addAll, removeAll, retainAll, containsAll.
Collection nu spune nimic despre ordine sau duplicate: o listă păstrează ordinea și permite duplicate, o mulțime nu permite duplicate. Map nu este o Collection, dar îți dă colecții prin keySet(), values() și entrySet().
Folosește Collection<T> ca tip de parametru când metoda ta are nevoie doar să parcurgă sau să numere elementele. Așa poate primi la fel de bine o listă, o mulțime sau o coadă.
Parametri
| Parametru | Descriere |
|---|---|
E |
Tipul elementelor din colecție. |
Ce returnează
Este o interfață; obiectele concrete vin din ArrayList, HashSet, TreeSet, ArrayDeque etc.
Exemple
Exemplul 1: O metodă care primește orice colecție
Aceeași metodă medie primește o listă, un TreeSet și o coadă. Toate sunt Collection<Integer>.
import java.util.ArrayDeque;
import java.util.Collection;
import java.util.List;
import java.util.TreeSet;
public class Main {
static double medie(Collection<Integer> note) {
int suma = 0;
for (int n : note) {
suma += n;
}
return note.isEmpty() ? 0 : (double) suma / note.size();
}
public static void main(String[] args) {
System.out.println("Listă: " + medie(List.of(9, 10, 8, 9)));
System.out.println("Mulțime: " + medie(new TreeSet<>(List.of(9, 10, 8, 9))));
System.out.println("Coadă: " + medie(new ArrayDeque<>(List.of(5, 6))));
}
}
Rezultat
Listă: 9.0
Mulțime: 9.0
Coadă: 5.5
Exemplul 2: Operațiile comune pe o colecție
import java.util.ArrayList;
import java.util.Collection;
public class Main {
public static void main(String[] args) {
Collection<String> orase = new ArrayList<>();
orase.add("Iași");
orase.add("Cluj");
orase.add("Sibiu");
System.out.println(orase + ", mărime " + orase.size());
System.out.println("Are Cluj? " + orase.contains("Cluj"));
orase.remove("Cluj");
System.out.println("După remove: " + orase);
orase.clear();
System.out.println("Goală? " + orase.isEmpty());
}
}
Rezultat
[Iași, Cluj, Sibiu], mărime 3
Are Cluj? true
După remove: [Iași, Sibiu]
Goală? true
Exemplul 3: Același cod, comportament diferit: listă sau mulțime
add returnează false când mulțimea are deja elementul. Lista acceptă duplicatul.
import java.util.ArrayList;
import java.util.Collection;
import java.util.TreeSet;
public class Main {
static void adauga(Collection<String> c) {
System.out.print(c.add("Ana") + " ");
System.out.print(c.add("Ana") + " ");
System.out.println(c);
}
public static void main(String[] args) {
adauga(new ArrayList<>());
adauga(new TreeSet<>());
}
}
Rezultat
true true [Ana, Ana]
true false [Ana]
Greșeli frecvente
- Încerci
colectie.get(0)pe o variabilă de tipCollection. Metodagetexistă doar înList; o colecție în general nu are poziții. - Crezi că
Mapeste oCollection. Nu este; foloseștemap.keySet(),map.values()saumap.entrySet(). - Folosești tipul brut
Collectionfără<T>. Compilatorul avertizează (rawtypes), iar cu-Werrorcodul nu se compilează.
Comenzi înrudite
List: Interfața pentru liste ordonate: elementele au poziții (0, 1, 2…), se pot repeta și se pot citi după index.Set: Interfața pentru mulțimi: colecții fără duplicate, în care întrebi rapid dacă un element există.Queue: Interfața pentru cozi: elementele intră la coadă și ies din față, în ordinea sosirii (FIFO), ca la ghișeu.Iterable: Interfața care permite bucla for-each: orice obiect Iterable poate fi parcurs cu for (T x : obiect) și cu forEach.Collection.stream: Creează un Stream peste elementele colecției, ca să le filtrezi, transformi, sortezi sau aduni într-un rezultat.Collection.addAll: Adaugă în colecție toate elementele altei colecții. Returnează true dacă s-a schimbat ceva.Collection.toArray: Copiază elementele unei liste, mulțimi sau cozi într-un array nou, de tip Object[] sau de tipul ales (String[], Integer[]).