Arrays.asList în Java

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.

Sintaxă
@SafeVarargs
static <T> List<T> asList(T... a)

Ce face Arrays.asList

Arrays.asList(a, b, c) sau Arrays.asList(array) returnează o List care folosește chiar array-ul în spate. get și set funcționează, iar set modifică și array-ul. add și remove aruncă UnsupportedOperationException, pentru că un array nu își poate schimba lungimea.

Spre deosebire de List.of, acceptă null și permite set și sort. Pentru o listă complet modificabilă, copiază: new ArrayList<>(Arrays.asList(...)).

Atenție la array-urile de primitive: Arrays.asList(new int[]{1, 2}) nu dă o listă de numere, ci o listă cu un singur element (array-ul întreg), de tip List<int[]>.

Parametri

Parametru Descriere
a Valorile sau un array de obiecte.

Ce returnează

O listă de mărime fixă, legată de array.

Exemple

Exemplul 1: Lista și array-ul se modifică împreună

import java.util.Arrays;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        String[] echipa = {"Ana", "Radu", "Elena"};
        List<String> lista = Arrays.asList(echipa);
        lista.set(1, "Mihai");
        System.out.println("Array: " + Arrays.toString(echipa));
        echipa[0] = "Ioana";
        System.out.println("Listă: " + lista);
        try {
            lista.add("Bogdan");
        } catch (UnsupportedOperationException e) {
            System.out.println("add: UnsupportedOperationException, mărimea e fixă");
        }
    }
}

Rezultat

Array: [Ana, Mihai, Elena]
Listă: [Ioana, Mihai, Elena]
add: UnsupportedOperationException, mărimea e fixă

Exemplul 2: Listă modificabilă și capcana primitivelor

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

public class Main {
    public static void main(String[] args) {
        List<String> orase = new ArrayList<>(Arrays.asList("Iași", "Cluj"));
        orase.add("Arad");
        System.out.println(orase);

        int[] primitive = {1, 2, 3};
        List<int[]> gresit = Arrays.asList(primitive);
        System.out.println("Mărime cu int[]: " + gresit.size());
        List<Integer> corect = Arrays.asList(1, 2, 3);
        System.out.println("Mărime cu valori Integer: " + corect.size());
    }
}

Rezultat

[Iași, Cluj, Arad]
Mărime cu int[]: 1
Mărime cu valori Integer: 3

Greșeli frecvente

  • Adaugi sau ștergi din lista returnată. Apare UnsupportedOperationException; copiaz-o într-un ArrayList.
  • Dai un int[] și aștepți o List<Integer>. Primești o listă cu un singur element; folosește Arrays.stream(a).boxed().toList().

Comenzi înrudite

  • List.of: Creează o listă nemodificabilă din valorile date (of) sau dintr-o copie a altei colecții (copyOf).
  • Collection.toArray: Copiază elementele unei liste, mulțimi sau cozi într-un array nou, de tip Object[] sau de tipul ales (String[], Integer[]).
  • Arrays.stream: Creează un stream din elementele unui array, ca să le filtrezi, transformi sau aduni (sum, average, max) cu o singură expresie.
  • Collections.addAll: Adaugă dintr-o dată mai multe valori (sau un array) într-o colecție existentă. Returnează true dacă s-a schimbat.
  • ArrayList: Lista implementată cu un array intern care crește automat; acces foarte rapid după index. Cea mai folosită listă din Java.