HashSet în Dart

Set bazat pe tabel hash, fără ordine garantată a elementelor; potrivit doar pentru verificări de apartenență.

Sintaxă
import 'dart:collection';

abstract final class HashSet<E> implements Set<E>
HashSet<E>({bool equals(E a, E b)?, int hashCode(E e)?, bool isValidKey(dynamic)?})
HashSet<E>.of(Iterable<E> elements)

Ce face HashSet

HashSet are aceleași operații ca un set obișnuit (add, contains, remove, union), dar nu ține minte ordinea inserării. Când îl parcurgi, ordinea este nedefinită.

Este alegerea potrivită pentru seturi mari folosite doar ca „listă de verificat”. Pentru afișare, sortează elementele (toList()..sort()) sau folosește SplayTreeSet.

Parametri

Parametru Descriere
equals / hashCode / isValidKey Opțional: regula de egalitate a elementelor.
elements Pentru HashSet.of: elementele copiate.

Ce returnează

Un HashSet gol sau cu elementele date.

Exemple

Exemplul 1: Numere de înmatriculare verificate

import 'dart:collection';

void main() {
  final autorizate = HashSet.of(['IS-01-ABC', 'CJ-22-XYZ', 'B-100-DEX']);
  for (final nr in ['CJ-22-XYZ', 'BV-07-QQQ']) {
    print('$nr: ${autorizate.contains(nr) ? 'intră' : 'acces refuzat'}');
  }
}

Rezultat

CJ-22-XYZ: intră
BV-07-QQQ: acces refuzat

Exemplul 2: Afișare deterministă prin sortare

import 'dart:collection';

void main() {
  final cuvinte = HashSet<String>()..addAll('mere pere mere prune pere caise'.split(' '));
  print('Unice: ${cuvinte.length}');
  print((cuvinte.toList()..sort()).join(', '));
}

Rezultat

Unice: 4
caise, mere, pere, prune

Greșeli frecvente

  • Scrii teste sau afișări care depind de ordinea dintr-un HashSet. Pot trece azi și pica mâine; sortează mai întâi.

Comenzi înrudite

  • Set: Colecție fără elemente duplicate: fiecare valoare apare o singură dată, iar căutarea este rapidă.
  • LinkedHashSet: Set care păstrează ordinea inserării; este tipul implicit al seturilor scrise cu acolade.
  • SplayTreeSet: Set care ține elementele mereu sortate și fără duplicate.
  • HashMap: Map bazat pe tabel hash, fără ordine garantată a cheilor; puțin mai ușor decât LinkedHashMap.