Collections în Java

Clasă cu metode statice gata făcute pentru colecții: sortare, amestecare, minim și maxim, numărare, liste nemodificabile.

Sintaxă
import java.util.Collections;

Collections.sort(lista);
Collections.max(colectie);
Collections.unmodifiableList(lista);
...

Ce face Collections

Collections (cu „s” la final) nu este o colecție, ci o „cutie de unelte”: o clasă cu metode statice care primesc o colecție și fac ceva cu ea. Le apelezi cu numele clasei: Collections.sort(lista), Collections.max(note).

Metodele principale: sort, reverse, shuffle, swap (modifică ordinea unei liste); max, min, frequency, binarySearch (caută); unmodifiableList, synchronizedList (învelesc o listă); emptyList, singletonList, nCopies (creează liste speciale); addAll (adaugă mai multe valori).

Nu confunda cu Collection (fără „s”), interfața comună a listelor și mulțimilor. Pentru array-uri, echivalentul este clasa Arrays.

Ce returnează

Depinde de metodă; fiecare are pagina ei.

Exemple

Exemplul 1: Câteva unelte pe aceeași listă

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<Integer> note = new ArrayList<>(List.of(7, 10, 5, 9, 10, 8));
        System.out.println("Max: " + Collections.max(note) + ", min: " + Collections.min(note));
        System.out.println("De câte ori 10: " + Collections.frequency(note, 10));
        Collections.sort(note);
        System.out.println("Sortate: " + note);
        Collections.reverse(note);
        System.out.println("Inversate: " + note);
    }
}

Rezultat

Max: 10, min: 5
De câte ori 10: 2
Sortate: [5, 7, 8, 9, 10, 10]
Inversate: [10, 10, 9, 8, 7, 5]

Exemplul 2: O listă protejată pentru cititori

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Main {
    private final List<String> elevi = new ArrayList<>();

    List<String> getElevi() {
        return Collections.unmodifiableList(elevi);
    }

    public static void main(String[] args) {
        Main clasa = new Main();
        Collections.addAll(clasa.elevi, "Ana", "Radu", "Elena");
        List<String> vedere = clasa.getElevi();
        System.out.println(vedere);
        try {
            vedere.add("Intrus");
        } catch (UnsupportedOperationException e) {
            System.out.println("Lista nu se poate modifica din afară");
        }
    }
}

Rezultat

[Ana, Radu, Elena]
Lista nu se poate modifica din afară

Greșeli frecvente

  • Scrii Collection.sort(lista) (fără „s”). Metoda nu există acolo; clasa utilitară este Collections.
  • Încerci new Collections(). Clasa nu se instanțiază; toate metodele sunt statice.

Comenzi înrudite

  • Collections.sort: Sortează o listă pe loc: crescător după ordinea naturală sau după un Comparator dat. Echivalent cu lista.sort(…).
  • Collections.max: Returnează cel mai mare (max) sau cel mai mic (min) element dintr-o colecție, după ordinea naturală sau după un Comparator.
  • Collections.shuffle: Amestecă aleatoriu elementele unei liste, pe loc. Cu un Random cu seed fix, amestecarea iese la fel la fiecare rulare.
  • Collections.unmodifiableList: Returnează o vedere doar-pentru-citire a unei liste: cine o primește nu o poate modifica, dar schimbările originalului se văd.
  • Arrays: Clasă cu metode statice pentru array-uri: afișare, sortare, căutare, copiere, umplere, comparare și transformare în listă sau stream.
  • Collection: Interfața de bază pentru liste, mulțimi și cozi: metodele comune add, remove, contains, size și parcurgerea cu for-each.