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
setdirect pe rezultat. Este nemodificabilă; copiaz-o înnew 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.