Ce face List
List este interfața din java.util pentru o colecție ordonată: fiecare element are o poziție, numerotată de la 0. Spre deosebire de un array (int[]), o listă își schimbă singură dimensiunea: adaugi cu add, ștergi cu remove, citești cu get.
List este doar o interfață (un „contract”), deci nu poți scrie new List<>(). Creezi un obiect dintr-o clasă care o implementează: ArrayList (cea mai folosită) sau LinkedList. Variabila o declari de obicei cu tipul interfeței: List<String> nume = new ArrayList<>();. Așa poți schimba mai târziu implementarea fără să modifici restul codului.
Între parantezele unghiulare scrii tipul elementelor. Listele țin doar obiecte, deci pentru numere scrii List<Integer>, nu List<int>; Java transformă automat int în Integer (autoboxing). List.of(...) creează rapid o listă fixă, care nu mai poate fi modificată.
Parametri
| Parametru | Descriere |
|---|---|
T |
Tipul elementelor: String, Integer, Double, un record propriu etc. |
Ce returnează
Un obiect care implementează List. Metodele lui (add, get, remove, size…) au pagini separate.
Exemple
Exemplul 1: O listă de orașe care crește
Declari variabila cu tipul List și creezi un ArrayList. println afișează lista între paranteze drepte.
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> orase = new ArrayList<>();
orase.add("Iași");
orase.add("Cluj");
orase.add("Timișoara");
orase.add("Iași"); // elementele se pot repeta
System.out.println(orase);
System.out.println("Primul oraș: " + orase.get(0));
System.out.println("Câte orașe: " + orase.size());
}
}
Rezultat
[Iași, Cluj, Timișoara, Iași]
Primul oraș: Iași
Câte orașe: 4
Exemplul 2: Parcurgerea unei liste de note
Bucla for (int nota : note) trece prin elemente în ordinea pozițiilor. Fiecare Integer este transformat automat în int.
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> note = List.of(9, 7, 10, 8);
int suma = 0;
for (int nota : note) {
suma += nota;
}
System.out.println("Notele Anei: " + note);
System.out.println("Media: " + (double) suma / note.size());
}
}
Rezultat
Notele Anei: [9, 7, 10, 8]
Media: 8.5
Exemplul 3: O metodă care primește orice listă
Parametrul are tipul List, deci metoda primește la fel de bine un ArrayList, un LinkedList sau o listă creată cu List.of.
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class Main {
static int total(List<Integer> preturi) {
int s = 0;
for (int p : preturi) {
s += p;
}
return s;
}
public static void main(String[] args) {
List<Integer> a = new ArrayList<>(List.of(12, 5, 30));
List<Integer> b = new LinkedList<>(List.of(7, 7));
System.out.println("Coș 1: " + total(a) + " lei");
System.out.println("Coș 2: " + total(b) + " lei");
System.out.println("Coș 3: " + total(List.of(100)) + " lei");
}
}
Rezultat
Coș 1: 47 lei
Coș 2: 14 lei
Coș 3: 100 lei
Greșeli frecvente
- Scrii
new List<>().Listeste o interfață și nu se poate instanția; foloseștenew ArrayList<>(). - Scrii
List<int>. Tipurile primitive nu pot fi folosite ca parametri generici; scrieList<Integer>. - Încerci să modifici o listă creată cu
List.of. ApareUnsupportedOperationException. Dacă vrei o listă modificabilă cu valori inițiale, scrienew ArrayList<>(List.of(...)). - Folosești tipul brut
Listfără parametru (List lista = new ArrayList();). Compilatorul avertizează (rawtypes,unchecked) și pierzi verificarea tipurilor.
Comenzi înrudite
ArrayList: Lista implementată cu un array intern care crește automat; acces foarte rapid după index. Cea mai folosită listă din Java.LinkedList: Listă dublu înlănțuită: adăugare și ștergere rapide la ambele capete; implementează și List, și Deque.List.add: Adaugă un element (sau toate elementele altei colecții) la sfârșitul listei ori la o poziție dată.List.get: get citește elementul de la o poziție; set îl înlocuiește și returnează valoarea veche.List.of: Creează o listă nemodificabilă din valorile date (of) sau dintr-o copie a altei colecții (copyOf).Collection: Interfața de bază pentru liste, mulțimi și cozi: metodele comune add, remove, contains, size și parcurgerea cu for-each.Set: Interfața pentru mulțimi: colecții fără duplicate, în care întrebi rapid dacă un element există.Map: Interfața pentru dicționare: perechi cheie → valoare, în care găsești rapid valoarea după cheie. Cheile sunt unice.