Arrays.copyOf în Java

copyOf face un array nou cu primele n elemente (completând cu 0/null dacă e mai lung); copyOfRange copiază o porțiune.

Sintaxă
static int[] copyOf(int[] original, int newLength)     // și pentru celelalte tipuri
static <T> T[] copyOf(T[] original, int newLength)
static int[] copyOfRange(int[] original, int from, int to)

Ce face Arrays.copyOf

Arrays.copyOf(a, n) creează un array nou de lungime n. Dacă n este mai mic decât lungimea, păstrează primele n elemente; dacă e mai mare, completează restul cu valoarea implicită (0, false, null). Este felul simplu de a „mări” un array.

Arrays.copyOfRange(a, de, pana) copiază pozițiile de la de (inclus) la pana (exclus). pana poate depăși lungimea; pozițiile în plus primesc valoarea implicită.

Ambele fac o copie superficială: la array-uri de obiecte se copiază referințele, nu obiectele. Originalul nu se schimbă.

Parametri

Parametru Descriere
original Array-ul sursă.
newLength Lungimea array-ului nou.
from, to Porțiunea copiată: from inclus, to exclus.

Ce returnează

Un array nou.

Exemple

Exemplul 1: Mărirea și micșorarea unui array

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        int[] note = {9, 7, 10};
        int[] maiMare = Arrays.copyOf(note, 5);
        int[] primele2 = Arrays.copyOf(note, 2);
        System.out.println(Arrays.toString(maiMare));
        System.out.println(Arrays.toString(primele2));

        String[] orase = {"Iași", "Cluj"};
        System.out.println(Arrays.toString(Arrays.copyOf(orase, 4)));
    }
}

Rezultat

[9, 7, 10, 0, 0]
[9, 7]
[Iași, Cluj, null, null]

Exemplul 2: O porțiune cu copyOfRange

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        String[] luni = {"ian", "feb", "mar", "apr", "mai", "iun", "iul", "aug", "sep", "oct", "nov", "dec"};
        String[] trimestru2 = Arrays.copyOfRange(luni, 3, 6);
        System.out.println("T2: " + Arrays.toString(trimestru2));
        int[] vanzari = {120, 80, 150};
        System.out.println(Arrays.toString(Arrays.copyOfRange(vanzari, 1, 5)));
    }
}

Rezultat

T2: [apr, mai, iun]
[80, 150, 0, 0]

Greșeli frecvente

  • Faci int[] copie = original; și crezi că ai o copie. Ambele variabile arată spre același array; folosește Arrays.copyOf sau original.clone().
  • Te aștepți ca la array-uri de obiecte să se copieze și obiectele. Se copiază doar referințele.

Comenzi înrudite

  • Arrays.fill: Pune aceeași valoare pe toate pozițiile unui array sau pe o porțiune din el.
  • List.subList: Returnează o vedere a unei porțiuni din listă, de la fromIndex inclusiv la toIndex exclusiv.
  • Arrays: Clasă cu metode statice pentru array-uri: afișare, sortare, căutare, copiere, umplere, comparare și transformare în listă sau stream.
  • Collection.toArray: Copiază elementele unei liste, mulțimi sau cozi într-un array nou, de tip Object[] sau de tipul ales (String[], Integer[]).