Ce face List.of
List.of(a, b, c) creează o listă cu exact aceste elemente, în această ordine. Lista este nemodificabilă: add, remove, set, clear aruncă UnsupportedOperationException. Este modul cel mai scurt de a scrie o listă de valori fixe.
List.copyOf(c) face o copie nemodificabilă a colecției c. Dacă c se schimbă mai târziu, copia rămâne la fel. Dacă c este deja o listă nemodificabilă creată cu of/copyOf, Java poate returna chiar aceeași listă, fără copiere.
Niciuna nu acceptă null: un element null aruncă NullPointerException. Ca să obții o listă modificabilă cu valori inițiale, scrie new ArrayList<>(List.of(...)).
Parametri
| Parametru | Descriere |
|---|---|
elemente |
Valorile listei (zero sau mai multe). |
c |
Colecția copiată (nu poate conține null). |
Ce returnează
O listă nemodificabilă.
Exemple
Exemplul 1: Liste de valori fixe
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> anotimpuri = List.of("primăvară", "vară", "toamnă", "iarnă");
List<Integer> goala = List.of();
System.out.println(anotimpuri + " are " + anotimpuri.size() + " elemente");
System.out.println("goala = " + goala);
try {
anotimpuri.add("al cincilea");
} catch (UnsupportedOperationException e) {
System.out.println("Nu se poate modifica.");
}
}
}
Rezultat
[primăvară, vară, toamnă, iarnă] are 4 elemente
goala = []
Nu se poate modifica.
Exemplul 2: copyOf: o copie care nu se mai schimbă
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> inscrisi = new ArrayList<>(List.of("Ana", "Mihai"));
List<String> listaFinala = List.copyOf(inscrisi);
inscrisi.add("Ioana"); // după închiderea înscrierilor
System.out.println("Înscriși acum: " + inscrisi);
System.out.println("Lista finală: " + listaFinala);
}
}
Rezultat
Înscriși acum: [Ana, Mihai, Ioana]
Lista finală: [Ana, Mihai]
Exemplul 3: List.of nu acceptă null
import java.util.List;
public class Main {
public static void main(String[] args) {
try {
List<String> l = List.of("Ana", null);
System.out.println(l);
} catch (NullPointerException e) {
System.out.println("List.of cu null: NullPointerException");
}
List<String> modificabila = new java.util.ArrayList<>(List.of("Ana"));
modificabila.add(null);
System.out.println("ArrayList acceptă null: " + modificabila);
}
}
Rezultat
List.of cu null: NullPointerException
ArrayList acceptă null: [Ana, null]
Greșeli frecvente
- Primești o listă de la
List.ofși încerci să o sortezi cusort: și sortarea o modifică, deci aruncă excepție. Sortează o copie:new ArrayList<>(lista). - Crezi că lista nemodificabilă face și elementele nemodificabile. Dacă elementele sunt obiecte modificabile (de exemplu alte liste), ele se pot schimba în continuare.
- Pui
nullîntr-o listă creată cuList.ofsau copiezi cucopyOfo listă care conținenull.
Comenzi înrudite
List: Interfața pentru liste ordonate: elementele au poziții (0, 1, 2…), se pot repeta și se pot citi după index.List.ofLazy: Listă nemodificabilă a cărei valoare de la fiecare poziție se calculează abia la prima citire, apoi se păstrează.Arrays.asList: Returnează o listă de mărime fixă legată de un array: poți citi și schimba elemente cu set, dar nu poți adăuga sau șterge.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.Collections.emptyList: emptyList() returnează o listă goală nemodificabilă; singletonList(x) o listă nemodificabilă cu un singur element.Set.of: Creează o mulțime nemodificabilă din valorile date (of) sau dintr-o colecție existentă (copyOf). Ordinea nu este garantată.Map.of: Creează un map nemodificabil din perechi date direct (of, ofEntries) sau copiind alt map (copyOf). Ordinea nu este garantată.