Arrays în Java

Clasă cu metode statice pentru array-uri: afișare, sortare, căutare, copiere, umplere, comparare și transformare în listă sau stream.

Sintaxă
import java.util.Arrays;

Arrays.toString(array)
Arrays.sort(array)
Arrays.fill(array, valoare)
Arrays.copyOf(array, lungime)
...

Ce face Arrays

Array-urile din Java (int[], String[]) nu au metode proprii utile: println pe un array afișează ceva ca [I@1b6d3586, iar == compară adresele. Clasa Arrays din java.util aduce uneltele care lipsesc, ca metode statice.

Cele mai folosite: toString și deepToString (afișare), sort și binarySearch (sortare și căutare), fill (umplere), copyOf și copyOfRange (copii), equals (comparare după conținut), asList (vedere de tip listă) și stream (prelucrare cu stream-uri).

Majoritatea metodelor au variante pentru fiecare tip primitiv (int[], double[], char[]…) și pentru array-uri de obiecte. Pentru liste și mulțimi, clasa echivalentă este Collections.

Ce returnează

Depinde de metodă; fiecare are pagina ei.

Exemple

Exemplul 1: Uneltele de bază pe un array de note

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        int[] note = {7, 10, 5, 9, 8};
        System.out.println("println direct începe cu [I@: " + String.valueOf(note).startsWith("[I@"));
        System.out.println("toString: " + Arrays.toString(note));
        Arrays.sort(note);
        System.out.println("Sortate: " + Arrays.toString(note));
        System.out.println("Poziția notei 9: " + Arrays.binarySearch(note, 9));
        System.out.println("Suma: " + Arrays.stream(note).sum());
    }
}

Rezultat

println direct începe cu [I@: true
toString: [7, 10, 5, 9, 8]
Sortate: [5, 7, 8, 9, 10]
Poziția notei 9: 3
Suma: 39

Exemplul 2: Copiere și comparare

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        String[] orase = {"Iași", "Cluj", "Arad"};
        String[] copie = Arrays.copyOf(orase, orase.length);
        System.out.println("== : " + (orase == copie));
        System.out.println("equals: " + Arrays.equals(orase, copie));
        copie[0] = "Sibiu";
        System.out.println(Arrays.toString(orase) + " vs " + Arrays.toString(copie));
    }
}

Rezultat

== : false
equals: true
[Iași, Cluj, Arad] vs [Sibiu, Cluj, Arad]

Greșeli frecvente

  • Afișezi un array cu System.out.println(array). Apare tipul și un cod hash ([I@...); folosește Arrays.toString.
  • Compari array-uri cu == sau cu array.equals(altul). Ambele verifică dacă e același obiect; folosește Arrays.equals.
  • Confunzi Arrays (pentru array-uri) cu Collections (pentru liste). Metodele au nume asemănătoare, dar primesc tipuri diferite.

Comenzi înrudite

  • Arrays.toString: toString transformă un array în text de forma [1, 2, 3]; deepToString face același lucru pentru matrice (array-uri de array-uri).
  • Arrays.sort: Sortează pe loc un array: crescător pentru numere și texte sau după un Comparator pentru array-uri de obiecte.
  • Arrays.asList: 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.
  • Arrays.copyOf: copyOf face un array nou cu primele n elemente (completând cu 0/null dacă e mai lung); copyOfRange copiază o porțiune.
  • Collections: Clasă cu metode statice gata făcute pentru colecții: sortare, amestecare, minim și maxim, numărare, liste nemodificabile.
  • Collection.toArray: Copiază elementele unei liste, mulțimi sau cozi într-un array nou, de tip Object[] sau de tipul ales (String[], Integer[]).