Sobes.tech
Junior — Middle

Jakie typy kluczowych danych są dozwolone do użycia w tablicy haszującej?

sobes.tech AI

Odpowiedź od AI

W tablicach haszujących (np. w Dart, używanym w Flutter) klucze mogą być obiektami dowolnych typów, pod warunkiem, że poprawnie implementują metody hashCode i ==. Jest to konieczne do poprawnego obliczania wartości hasz i porównywania kluczy.

Najczęściej używa się typów prymitywnych, takich jak łańcuchy (String), liczby (int), ale można też używać własnych klas, jeśli nadpisze się te metody. Na przykład:

class Person {
  final String name;
  final int id;

  Person(this.name, this.id);

  @override
  bool operator ==(Object other) =>
      identical(this, other) ||
      other is Person && runtimeType == other.runtimeType && id == other.id;

  @override
  int get hashCode => id.hashCode;
}

void main() {
  var map = <Person, String>{};
  var p = Person('Alice', 1);
  map[p] = 'Programista';
  print(map[p]); // Programista
}

Zatem klucze muszą być niezmiennicze i poprawnie zaimplementować metody hashCode i ==.