SplayTreeSet în Dart

Set care ține elementele mereu sortate și fără duplicate.

Sintaxă
import 'dart:collection';

final class SplayTreeSet<E> implements Set<E>
SplayTreeSet<E>([int compare(E a, E b)?, bool isValidKey(dynamic)?])
SplayTreeSet<E>.of(Iterable<E> elements, [int compare(E a, E b)?])

Ce face SplayTreeSet

SplayTreeSet este un set sortat: elementele sunt unice și vin mereu în ordine crescătoare (sau în ordinea dată de compare). Are first și last rapide pentru minim și maxim.

Două elemente pentru care compare returnează 0 sunt considerate același element, deci al doilea nu se mai adaugă. Ține cont de asta când scrii o comparare după un singur câmp.

Parametri

Parametru Descriere
compare Opțional: ordinea elementelor. Fără ea, elementele trebuie să fie Comparable.
elements Pentru SplayTreeSet.of: elementele de pornire.

Ce returnează

Un set sortat.

Exemple

Exemplul 1: Note unice, sortate

import 'dart:collection';

void main() {
  final note = SplayTreeSet.of([9, 7, 10, 7, 9, 5]);
  print(note);
  print('Minim ${note.first}, maxim ${note.last}');
  note.add(8);
  print(note);
}

Rezultat

{5, 7, 9, 10}
Minim 5, maxim 10
{5, 7, 8, 9, 10}

Exemplul 2: Sortare după lungime, apoi alfabetic

Compararea doar după lungime ar considera „Ana” și „Ion” același element. De aceea comparăm și alfabetic când lungimile sunt egale.

import 'dart:collection';

void main() {
  int compara(String a, String b) {
    final dupaLungime = a.length.compareTo(b.length);
    return dupaLungime != 0 ? dupaLungime : a.compareTo(b);
  }

  final nume = SplayTreeSet<String>(compara)..addAll(['Mihai', 'Ana', 'Ion', 'Elena', 'Bogdan']);
  print(nume);

  final doarLungime = SplayTreeSet<String>((a, b) => a.length.compareTo(b.length))
    ..addAll(['Ana', 'Ion', 'Mihai']);
  print(doarLungime);
}

Rezultat

{Ana, Ion, Elena, Mihai, Bogdan}
{Ana, Mihai}

Greșeli frecvente

  • Scrii un compare care returnează 0 pentru elemente diferite. Set-ul le consideră duplicate și păstrează doar primul.

Comenzi înrudite

  • SplayTreeMap: Map care ține cheile mereu sortate; parcurgerea și print dau cheile în ordine crescătoare.
  • Set: Colecție fără elemente duplicate: fiecare valoare apare o singură dată, iar căutarea este rapidă.
  • HashSet: Set bazat pe tabel hash, fără ordine garantată a elementelor; potrivit doar pentru verificări de apartenență.
  • List.sort: Sortează lista pe loc, crescător sau după o funcție de comparare.