Ce face Set.of
Set.of(a, b, c) creează rapid o mulțime fixă, fără duplicate. Dacă dai de două ori aceeași valoare, apare IllegalArgumentException: of consideră duplicatele o greșeală. null nu este permis.
Set.copyOf(colectie) face o copie nemodificabilă a oricărei colecții; aici duplicatele sunt eliminate fără eroare. Dacă originalul se schimbă după copiere, copia rămâne la fel.
Ambele mulțimi sunt nemodificabile: add, remove, clear aruncă UnsupportedOperationException. Ordinea de parcurgere nu este garantată și se schimbă de la o rulare la alta, deci nu le afișa direct dacă ordinea contează: copiază în TreeSet.
Parametri
| Parametru | Descriere |
|---|---|
elements |
Valorile mulțimii (distincte, fără null). |
coll |
Colecția de copiat (fără null). |
Ce returnează
O mulțime nemodificabilă.
Exemple
Exemplul 1: Vocalele, pentru verificări rapide
import java.util.Set;
public class Main {
public static void main(String[] args) {
Set<Character> vocale = Set.of('a', 'e', 'i', 'o', 'u', 'ă', 'â', 'î');
String cuvant = "învățătoare";
int nr = 0;
for (char c : cuvant.toCharArray()) {
if (vocale.contains(c)) {
nr++;
}
}
System.out.println(cuvant + " are " + nr + " vocale");
}
}
Rezultat
învățătoare are 6 vocale
Exemplul 2: copyOf elimină duplicatele, of le refuză
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
public class Main {
public static void main(String[] args) {
List<String> orase = List.of("Iași", "Cluj", "Iași");
Set<String> copie = Set.copyOf(orase);
System.out.println("copyOf: " + new TreeSet<>(copie));
try {
Set.of("Iași", "Cluj", "Iași");
} catch (IllegalArgumentException e) {
System.out.println("of cu duplicat: IllegalArgumentException");
}
try {
copie.add("Arad");
} catch (UnsupportedOperationException e) {
System.out.println("add: UnsupportedOperationException");
}
}
}
Rezultat
copyOf: [Cluj, Iași]
of cu duplicat: IllegalArgumentException
add: UnsupportedOperationException
Greșeli frecvente
- Afișezi direct un
Set.of(...)și te aștepți la aceeași ordine. Ordinea se schimbă între rulări. - Scrii
Set.ofcu valori care se pot repeta (de exemplu citite de la utilizator). FoloseșteSet.copyOf(lista)saunew HashSet<>(lista). - Vrei o mulțime modificabilă cu valori inițiale și folosești
Set.of. Scrienew HashSet<>(Set.of(...)).
Comenzi înrudite
Set: Interfața pentru mulțimi: colecții fără duplicate, în care întrebi rapid dacă un element există.List.of: Creează o listă nemodificabilă din valorile date (of) sau dintr-o copie a altei colecții (copyOf).Map.of: Creează un map nemodificabil din perechi date direct (of, ofEntries) sau copiind alt map (copyOf). Ordinea nu este garantată.Set.ofLazy: Mulțime nemodificabilă formată din candidații care îndeplinesc o condiție; condiția se calculează abia când întrebi de un element.Collections.unmodifiableList: Returnează o vedere doar-pentru-citire a unei liste: cine o primește nu o poate modifica, dar schimbările originalului se văd.