List în Java

Interfața pentru liste ordonate: elementele au poziții (0, 1, 2...), se pot repeta și se pot citi după index.

Sintaxă
import java.util.List;
import java.util.ArrayList;

List<T> nume = new ArrayList<>();
List<T> nume = List.of(v1, v2, v3);

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<>(). List este o interfață și nu se poate instanția; folosește new ArrayList<>().
  • Scrii List<int>. Tipurile primitive nu pot fi folosite ca parametri generici; scrie List<Integer>.
  • Încerci să modifici o listă creată cu List.of. Apare UnsupportedOperationException. Dacă vrei o listă modificabilă cu valori inițiale, scrie new ArrayList<>(List.of(...)).
  • Folosești tipul brut List fă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.