setOf în Kotlin

Creează o mulțime: o colecție fără duplicate, în care verifici rapid dacă un element există.

Sintaxă
fun <T> setOf(vararg elemente: T): Set<T>
fun <T> mutableSetOf(vararg elemente: T): MutableSet<T>

Ce face setOf

Un Set (mulțime) ține fiecare valoare o singură dată. Dacă dai aceeași valoare de mai multe ori, rămâne o singură copie. Operația principală este verificarea apartenenței: x in multime.

setOf creează o mulțime doar pentru citire, mutableSetOf una cu add și remove. Ambele păstrează ordinea primei inserări (pe JVM sunt LinkedHashSet). add întoarce true dacă elementul era nou și false dacă exista deja.

O mulțime nu are poziții: nu poți scrie multime[0]. Dacă ai nevoie de ordine și de acces după poziție, transformă mulțimea în listă cu toList().

Parametri

Parametru Descriere
elemente Valorile inițiale; duplicatele sunt ignorate.

Ce returnează

Set<T> sau MutableSet<T> cu valorile unice, în ordinea primei apariții.

Exemple

Exemplul 1: Duplicatele dispar

„Iași” apare de două ori, dar mulțimea îl ține o singură dată.

fun main() {
    val orase = setOf("Iași", "Cluj", "Iași", "Timișoara")
    println(orase)
    println("Câte orașe distincte: ${orase.size}")
    println("Avem Cluj? ${"Cluj" in orase}")
    println("Avem Arad? ${"Arad" in orase}")
}

Rezultat

[Iași, Cluj, Timișoara]
Câte orașe distincte: 3
Avem Cluj? true
Avem Arad? false

Exemplul 2: Vizitatori unici cu mutableSetOf

add spune dacă vizitatorul este nou. Așa numărăm vizitatorii unici dintr-un jurnal.

fun main() {
    val jurnal = listOf("ana", "ion", "ana", "maria", "ion", "ana")
    val unici = mutableSetOf<String>()

    for (utilizator in jurnal) {
        val nou = unici.add(utilizator)
        println("$utilizator ${if (nou) "(nou)" else "(revenit)"}")
    }
    println("Vizitatori unici: $unici")
}

Rezultat

ana (nou)
ion (nou)
ana (revenit)
maria (nou)
ion (revenit)
ana (revenit)
Vizitatori unici: [ana, ion, maria]

Greșeli frecvente

  • Încerci multime[0]: un Set nu are acces după poziție. Folosește first() sau toList()[0].
  • Pui în mulțime obiecte ale unei clase obișnuite (nu data class): două obiecte cu aceleași câmpuri sunt considerate diferite, pentru că nu au equals/hashCode scrise.

Comenzi înrudite

  • hashSetOf: Creează o mulțime modificabilă: HashSet (fără ordine garantată) sau TreeSet (elemente mereu sortate).
  • Iterable.union: Operații pe mulțimi: union (reuniunea), intersect (elementele comune) și subtract (diferența); rezultatul e un Set.
  • Iterable.toSet: Transformă colecția într-o mulțime (fără duplicate): toSet, toMutableSet sau toSortedSet (sortată).
  • Iterable.distinct: Elimină duplicatele și întoarce o listă cu fiecare element o singură dată, în ordinea primei apariții.
  • Iterable.contains: contains (operatorul in) verifică dacă un element există; indexOf dă poziția primei apariții sau -1.