hashMapOf în Kotlin

Creează un map modificabil de un tip anume: HashMap (fără ordine), LinkedHashMap (ordinea inserării) sau SortedMap (chei sortate).

Sintaxă
fun <K, V> hashMapOf(vararg perechi: Pair<K, V>): HashMap<K, V>
fun <K, V> linkedMapOf(vararg perechi: Pair<K, V>): LinkedHashMap<K, V>
fun <K : Comparable<K>, V> sortedMapOf(vararg perechi: Pair<K, V>): SortedMap<K, V>   // doar JVM

Ce face hashMapOf

Toate trei creează un map modificabil, dar diferă prin ordinea în care apar cheile la parcurgere. hashMapOf dă un HashMap: rapid, dar ordinea cheilor nu este garantată și se poate schimba când adaugi elemente.

linkedMapOf dă un LinkedHashMap, care ține minte ordinea inserării (la fel ca mutableMapOf). sortedMapOf dă un java.util.TreeMap: cheile sunt mereu sortate crescător (alfabetic pentru texte), indiferent de ordinea adăugării. sortedMapOf există doar pe JVM.

Dacă nu ai nevoie de un tip anume, folosește mutableMapOf. Alege sortedMapOf când vrei rezultate sortate după cheie fără să sortezi de fiecare dată.

Parametri

Parametru Descriere
perechi Perechi cheie to valoare inițiale (pot lipsi).

Ce returnează

HashMap, LinkedHashMap sau SortedMap cu perechile date.

Exemple

Exemplul 1: Trei tipuri, trei ordini

Map-ul sortat afișează cheile alfabetic, cel „linked” în ordinea scrisă. Pentru HashMap nu ne bazăm pe ordine, așa că afișăm cheile sortate.

fun main() {
    val sortat = sortedMapOf("Vaslui" to 3, "Bacău" to 5, "Iași" to 8)
    val inOrdine = linkedMapOf("Vaslui" to 3, "Bacău" to 5, "Iași" to 8)
    val hash = hashMapOf("Vaslui" to 3, "Bacău" to 5, "Iași" to 8)

    println("sortedMapOf: $sortat")
    println("linkedMapOf: $inOrdine")
    println("hashMapOf (chei sortate de noi): ${hash.keys.sorted()}")
}

Rezultat

sortedMapOf: {Bacău=5, Iași=8, Vaslui=3}
linkedMapOf: {Vaslui=3, Bacău=5, Iași=8}
hashMapOf (chei sortate de noi): [Bacău, Iași, Vaslui]

Exemplul 2: Numărarea cuvintelor într-un HashMap

hashMapOf() fără argumente dă un map gol. La final sortăm perechile ca să avem o afișare stabilă.

fun main() {
    val text = "mere pere mere prune mere pere"
    val frecventa = hashMapOf<String, Int>()
    for (cuvant in text.split(" ")) {
        frecventa[cuvant] = (frecventa[cuvant] ?: 0) + 1
    }
    for (cuvant in frecventa.keys.sorted()) {
        println("$cuvant: ${frecventa[cuvant]}")
    }
}

Rezultat

mere: 3
pere: 2
prune: 1

Exemplul 3: SortedMap: prima și ultima cheie

Un SortedMap are și funcții proprii: firstKey(), lastKey(), headMap(cheie) (cheile mai mici decât cea dată).

fun main() {
    val temperaturi = sortedMapOf(14 to 21.5, 8 to 12.0, 20 to 17.3, 11 to 18.4)
    println(temperaturi)
    println("Prima oră: ${temperaturi.firstKey()}, ultima: ${temperaturi.lastKey()}")
    println("Dimineața (înainte de 12): ${temperaturi.headMap(12)}")
}

Rezultat

{8=12.0, 11=18.4, 14=21.5, 20=17.3}
Prima oră: 8, ultima: 20
Dimineața (înainte de 12): {8=12.0, 11=18.4}

Greșeli frecvente

  • Te bazezi pe ordinea unui HashMap: poate arăta „corect” azi și diferit după ce adaugi elemente sau schimbi versiunea Java. Folosește linkedMapOf/mutableMapOf sau sortedMapOf când ordinea contează.
  • Folosești sortedMapOf în cod Kotlin multiplatformă: există doar pe JVM.

Comenzi înrudite

  • mapOf: Creează un map (dicționar cheie → valoare) din perechi scrise cu „to”; mutableMapOf dă unul pe care îl poți modifica.
  • hashSetOf: Creează o mulțime modificabilă: HashSet (fără ordine garantată) sau TreeSet (elemente mereu sortate).
  • Map.toSortedMap: Creează un map nou cu cheile ordonate (crescător sau după un comparator), care rămâne sortat și după adăugări.
  • Map.keys: Proprietățile keys, values și entries dau cheile, valorile și perechile cheie–valoare ale unui map.