List.add în Java

Adaugă un element (sau toate elementele altei colecții) la sfârșitul listei ori la o poziție dată.

Sintaxă
boolean add(E e)
void add(int index, E element)
boolean addAll(Collection<? extends E> c)
boolean addAll(int index, Collection<? extends E> c)

Ce face List.add

add(e) pune elementul la sfârșitul listei și returnează true. add(index, e) îl inserează la poziția index: elementele de acolo încolo se mută cu o poziție la dreapta. Indexul poate fi de la 0 până la size() inclusiv (size() înseamnă „la sfârșit”).

addAll(c) adaugă toate elementele colecției c, în ordinea lor, la sfârșit; addAll(index, c) le inserează începând de la index. Returnează true dacă lista s-a schimbat (adică c nu era goală).

Pe o listă nemodificabilă (creată cu List.of, Collections.unmodifiableList sau Arrays.asList), aceste metode aruncă UnsupportedOperationException.

Parametri

Parametru Descriere
e / element Elementul de adăugat.
index Poziția la care se inserează: între 0 și size(). În afara intervalului apare IndexOutOfBoundsException.
c Colecția ale cărei elemente se adaugă.

Ce returnează

add(e): întotdeauna true pentru liste. add(index, e): nimic. addAll: true dacă s-a adăugat cel puțin un element.

Exemple

Exemplul 1: Adăugare la sfârșit și la o poziție

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

public class Main {
    public static void main(String[] args) {
        List<String> zile = new ArrayList<>();
        zile.add("luni");
        zile.add("miercuri");
        zile.add(1, "marți");             // între luni și miercuri
        zile.add(zile.size(), "joi");     // echivalent cu add("joi")
        System.out.println(zile);
    }
}

Rezultat

[luni, marți, miercuri, joi]

Exemplul 2: Unirea a două liste cu addAll

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

public class Main {
    public static void main(String[] args) {
        List<String> grupa1 = new ArrayList<>(List.of("Ana", "Mihai"));
        List<String> grupa2 = List.of("Ioana", "Radu");

        List<String> toti = new ArrayList<>(grupa1);
        boolean schimbat = toti.addAll(grupa2);
        System.out.println(toti + " (schimbat: " + schimbat + ")");

        toti.addAll(1, List.of("Elena", "Dan"));
        System.out.println(toti);
        System.out.println("addAll cu listă goală: " + toti.addAll(List.of()));
    }
}

Rezultat

[Ana, Mihai, Ioana, Radu] (schimbat: true)
[Ana, Elena, Dan, Mihai, Ioana, Radu]
addAll cu listă goală: false

Exemplul 3: Index greșit și listă nemodificabilă

Ambele greșeli aruncă excepții la rulare; aici le prindem ca să vezi mesajele.

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

public class Main {
    public static void main(String[] args) {
        List<Integer> note = new ArrayList<>(List.of(8, 9));
        try {
            note.add(5, 10);
        } catch (IndexOutOfBoundsException e) {
            System.out.println("Eroare: " + e.getMessage());
        }

        List<Integer> fixe = List.of(1, 2);
        try {
            fixe.add(3);
        } catch (UnsupportedOperationException e) {
            System.out.println("List.of nu se poate modifica");
        }
    }
}

Rezultat

Eroare: Index: 5, Size: 2
List.of nu se poate modifica

Greșeli frecvente

  • Pe o List<Integer>, lista.add(1, 5) nu adaugă două numere: inserează valoarea 5 la poziția 1.
  • Modifici lista în timp ce o parcurgi cu for-each (for (String s : l) l.add(...)). Apare ConcurrentModificationException; adaugă elementele într-o listă separată și apoi folosește addAll.
  • Faci lista.addAll(lista) și te aștepți la o buclă infinită: Java copiază întâi elementele, deci lista doar se dublează. E corect, dar rareori ce vrei.

Comenzi înrudite

  • List.addFirst: Adaugă un element la începutul (addFirst) sau la sfârșitul (addLast) listei; metode noi din Java 21.
  • List.remove: Șterge elementul de la o poziție sau prima apariție a unei valori; elementele de după se mută la stânga.
  • List.get: get citește elementul de la o poziție; set îl înlocuiește și returnează valoarea veche.
  • Collection.addAll: Adaugă în colecție toate elementele altei colecții. Returnează true dacă s-a schimbat ceva.
  • Collections.addAll: Adaugă dintr-o dată mai multe valori (sau un array) într-o colecție existentă. Returnează true dacă s-a schimbat.
  • List.of: Creează o listă nemodificabilă din valorile date (of) sau dintr-o copie a altei colecții (copyOf).