Collections.nCopies în Java

Returnează o listă nemodificabilă cu aceeași valoare repetată de n ori. Utilă pentru valori inițiale și separatoare.

Sintaxă
static <T> List<T> nCopies(int n, T o)

Ce face Collections.nCopies

Collections.nCopies(n, x) creează o listă cu n elemente, toate egale cu x. Lista nu ocupă memorie pentru fiecare copie: ține doar valoarea și numărul. Este nemodificabilă.

Se folosește des ca punct de plecare: new ArrayList<>(Collections.nCopies(7, 0)) dă o listă modificabilă cu 7 zerouri. Atenție: dacă x este un obiect modificabil, toate pozițiile arată spre același obiect.

Parametri

Parametru Descriere
n Numărul de copii (≥ 0).
o Valoarea repetată.

Ce returnează

O listă nemodificabilă de mărime n.

Exemple

Exemplul 1: Contoare pentru zilele săptămânii

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

public class Main {
    public static void main(String[] args) {
        List<Integer> comenzi = new ArrayList<>(Collections.nCopies(7, 0));
        int[] zileComenzi = {0, 2, 2, 4, 6, 2, 0};   // 0 = luni
        for (int z : zileComenzi) {
            comenzi.set(z, comenzi.get(z) + 1);
        }
        System.out.println(comenzi);
    }
}

Rezultat

[2, 0, 3, 0, 1, 0, 1]

Exemplul 2: Linii de separare și locuri libere

import java.util.Collections;

public class Main {
    public static void main(String[] args) {
        String linie = String.join("", Collections.nCopies(20, "-"));
        System.out.println(linie);
        System.out.println("Locuri: " + String.join(" ", Collections.nCopies(5, "[ ]")));
        System.out.println(linie);
    }
}

Rezultat

--------------------
Locuri: [ ] [ ] [ ] [ ] [ ]
--------------------

Greșeli frecvente

  • Faci nCopies(3, new ArrayList<>()) și crezi că ai trei liste diferite. Este aceeași listă, repetată de trei ori.
  • Încerci set direct pe rezultat. Este nemodificabilă; copiaz-o în new ArrayList<>(...).

Comenzi înrudite

  • Collections.emptyList: emptyList() returnează o listă goală nemodificabilă; singletonList(x) o listă nemodificabilă cu un singur element.
  • Arrays.fill: Pune aceeași valoare pe toate pozițiile unui array sau pe o porțiune din el.
  • List.of: Creează o listă nemodificabilă din valorile date (of) sau dintr-o copie a altei colecții (copyOf).
  • String.repeat: Returnează șirul repetat de count ori, lipit; util pentru linii, chenare și alinieri.