Sobes.tech
Junior — Middle

Milyen kulcsadat típusok megengedettek egy hash-táblában való használatra?

sobes.tech MI

Válasz az MI-től

A hash-táblákban (például Dartban, amit Flutterben használnak) a kulcsok bármilyen típusú objektumok lehetnek, feltéve, hogy helyesen valósítják meg a hashCode és == metódusokat. Ez szükséges a helyes hash-érték kiszámításához és a kulcsok összehasonlításához.

Általában primitív típusokat használnak, mint a stringek (String), számok (int), de egyedi osztályokat is lehet használni, ha ezeket a metódusokat felülírják. Például:

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] = 'Fejlesztő';
  print(map[p]); // Fejlesztő
}

Ezért a kulcsoknak változatlannak kell lenniük, és helyesen kell megvalósítaniuk a hashCode és == metódusokat.