SplayTreeMap în Dart

Map care ține cheile mereu sortate; parcurgerea și print dau cheile în ordine crescătoare.

Sintaxă
import 'dart:collection';

final class SplayTreeMap<K, V> implements Map<K, V>
SplayTreeMap<K, V>([int compare(K key1, K key2)?, bool isValidKey(dynamic)?])
SplayTreeMap<K, V>.of(Map<K, V> other, [int compare(K a, K b)?])

Ce face SplayTreeMap

SplayTreeMap păstrează cheile într-un arbore sortat. Oricând îl parcurgi, cheile vin în ordine, fără să mai sortezi tu. Căutarea, adăugarea și ștergerea durează puțin mai mult decât la un map hash, dar ordinea este mereu corectă.

Fără funcție de comparare, cheile trebuie să fie Comparable (numere, texte, DateTime). Cu o funcție compare proprie poți sorta descrescător sau după alt criteriu.

Are în plus metode care se bazează pe ordine: firstKey, lastKey, firstKeyAfter, lastKeyBefore.

Parametri

Parametru Descriere
compare Opțional: compară două chei (negativ, zero sau pozitiv).
isValidKey Opțional: ce obiecte pot fi căutate ca chei.

Ce returnează

Un map sortat după chei.

Exemple

Exemplul 1: Programul zilei, sortat după oră

import 'dart:collection';

void main() {
  final program = SplayTreeMap<String, String>();
  program['14:00'] = 'Laborator Dart';
  program['08:30'] = 'Matematică';
  program['10:00'] = 'Fizică';
  program['12:15'] = 'Pauză de masă';
  print(program);
  program.forEach((ora, activitate) => print('$ora  $activitate'));
}

Rezultat

{08:30: Matematică, 10:00: Fizică, 12:15: Pauză de masă, 14:00: Laborator Dart}
08:30  Matematică
10:00  Fizică
12:15  Pauză de masă
14:00  Laborator Dart

Exemplul 2: Ordine descrescătoare cu compare

import 'dart:collection';

void main() {
  final puncte = {150: 'Ana', 320: 'Mihai', 275: 'Ioana'};
  final clasament = SplayTreeMap<int, String>.of(puncte, (a, b) => b.compareTo(a));
  var loc = 1;
  clasament.forEach((p, nume) => print('${loc++}. $nume - $p puncte'));
}

Rezultat

1. Mihai - 320 puncte
2. Ioana - 275 puncte
3. Ana - 150 puncte

Greșeli frecvente

  • Folosești chei care nu sunt Comparable (de exemplu obiecte ale unei clase proprii) fără funcție compare. Apare o eroare de tip la prima adăugare.
  • Te aștepți ca textele cu diacritice să fie sortate ca în dicționar. Compararea implicită este după codurile Unicode: Ș vine după Z.

Comenzi înrudite

  • SplayTreeMap.firstKey: firstKey returnează cea mai mică cheie a unui SplayTreeMap, iar lastKey cea mai mare, sau null dacă e gol.
  • SplayTreeMap.firstKeyAfter: firstKeyAfter dă cea mai mică cheie mai mare decât cea dată; lastKeyBefore dă cea mai mare cheie mai mică.
  • SplayTreeSet: Set care ține elementele mereu sortate și fără duplicate.
  • Map: Colecție de perechi cheie–valoare: cauți rapid o valoare după cheia ei (nume, cod, oraș).
  • HashMap: Map bazat pe tabel hash, fără ordine garantată a cheilor; puțin mai ușor decât LinkedHashMap.