HashMap în Dart

Map bazat pe tabel hash, fără ordine garantată a cheilor; puțin mai ușor decât LinkedHashMap.

Sintaxă
import 'dart:collection';

abstract final class HashMap<K, V> implements Map<K, V>
HashMap<K, V>({bool equals(K a, K b)?, int hashCode(K key)?, bool isValidKey(dynamic)?})
HashMap<K, V>.of(Map<K, V> other)

Ce face HashMap

HashMap caută cheile la fel de rapid ca map-ul implicit, dar nu ține minte ordinea inserării: când îl parcurgi, cheile pot apărea în orice ordine, iar ordinea se poate schimba după adăugări. Consumă ceva mai puțină memorie.

Folosește-l când doar cauți după cheie și nu afișezi niciodată elementele în ordine. Dacă trebuie să le afișezi, sortează cheile întâi.

Parametri

Parametru Descriere
equals / hashCode / isValidKey Opțional: regula de egalitate a cheilor, ca la LinkedHashMap.
other Pentru HashMap.of: map-ul copiat.

Ce returnează

Un HashMap gol sau cu perechile copiate.

Exemple

Exemplul 1: Căutare după cod, afișare sortată

Ordinea internă a unui HashMap nu este garantată, așa că sortăm cheile înainte de afișare.

import 'dart:collection';

void main() {
  final judete = HashMap<String, String>();
  judete['IS'] = 'Iași';
  judete['CJ'] = 'Cluj';
  judete['BV'] = 'Brașov';
  judete['TM'] = 'Timiș';

  print(judete['CJ']);
  final coduri = judete.keys.toList()..sort();
  for (final c in coduri) {
    print('$c = ${judete[c]}');
  }
}

Rezultat

Cluj
BV = Brașov
CJ = Cluj
IS = Iași
TM = Timiș

Exemplul 2: Frecvența literelor

import 'dart:collection';

void main() {
  final frecventa = HashMap<String, int>();
  for (final litera in 'mississippi'.split('')) {
    frecventa.update(litera, (n) => n + 1, ifAbsent: () => 1);
  }
  final ordonat = frecventa.entries.toList()..sort((a, b) => a.key.compareTo(b.key));
  print(ordonat.map((e) => '${e.key}=${e.value}').join(', '));
}

Rezultat

i=4, m=1, p=2, s=4

Greșeli frecvente

  • Afișezi un HashMap direct cu print și te bazezi pe ordinea afișată. Ordinea nu este garantată; sortează cheile sau folosește map-ul implicit.

Comenzi înrudite

  • Map: Colecție de perechi cheie–valoare: cauți rapid o valoare după cheia ei (nume, cod, oraș).
  • LinkedHashMap: Map care păstrează ordinea inserării cheilor; este tipul implicit al map-urilor scrise cu acolade.
  • SplayTreeMap: Map care ține cheile mereu sortate; parcurgerea și print dau cheile în ordine crescătoare.
  • HashSet: Set bazat pe tabel hash, fără ordine garantată a elementelor; potrivit doar pentru verificări de apartenență.