LinkedHashMap în Dart

Map care păstrează ordinea inserării cheilor; este tipul implicit al map-urilor scrise cu acolade.

Sintaxă
import 'dart:collection';

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

Ce face LinkedHashMap

LinkedHashMap găsește cheile rapid, prin cod hash, și în plus ține minte ordinea în care au fost adăugate. {'a': 1} și Map() creează exact un astfel de map.

Îl creezi explicit când vrei o regulă proprie de egalitate pentru chei, prin equals și hashCode (de exemplu, chei text fără să conteze literele mari), sau un map după identitate, cu LinkedHashMap.identity().

Schimbarea valorii unei chei existente nu îi schimbă locul în ordine. Ca să muți o cheie la final, o ștergi și o adaugi din nou.

Parametri

Parametru Descriere
equals Opțional: când sunt două chei egale.
hashCode Opțional: codul hash al unei chei, compatibil cu equals.
isValidKey Opțional: ce obiecte pot fi căutate ca chei (folosit cu equals propriu).

Ce returnează

Un map gol care păstrează ordinea inserării.

Exemple

Exemplul 1: Chei fără să conteze literele mari

import 'dart:collection';

void main() {
  final stoc = LinkedHashMap<String, int>(
    equals: (a, b) => a.toLowerCase() == b.toLowerCase(),
    hashCode: (k) => k.toLowerCase().hashCode,
  );
  stoc['Mere'] = 10;
  stoc['MERE'] = 25;
  stoc['pere'] = 7;
  print(stoc);
  print(stoc['mere']);
}

Rezultat

{Mere: 25, pere: 7}
25

Exemplul 2: Ordinea la actualizare și la reinserare

import 'dart:collection';

void main() {
  final ultimeleVizite = {'Ana': 1, 'Mihai': 2, 'Ioana': 3};
  ultimeleVizite['Ana'] = 4;
  print(ultimeleVizite.keys);

  final v = ultimeleVizite.remove('Mihai')!;
  ultimeleVizite['Mihai'] = v + 3;
  print(ultimeleVizite.keys);
  print('Este LinkedHashMap: ${ultimeleVizite is LinkedHashMap}');
}

Rezultat

(Ana, Mihai, Ioana)
(Ana, Ioana, Mihai)
Este LinkedHashMap: true

Greșeli frecvente

  • Dai doar equals, fără hashCode potrivit. Două chei „egale” trebuie să aibă același cod hash, altfel map-ul nu le găsește.

Comenzi înrudite

  • 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.
  • SplayTreeMap: Map care ține cheile mereu sortate; parcurgerea și print dau cheile în ordine crescătoare.
  • LinkedHashSet: Set care păstrează ordinea inserării; este tipul implicit al seturilor scrise cu acolade.