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(...)). ApareConcurrentModificationException; adaugă elementele într-o listă separată și apoi foloseșteaddAll. - 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).