Sobes.tech
Junior — Middle

Millised võtmeandmetüübid on lubatud kasutamiseks hajutustabelis?

sobes.tech AI

Vastus AI-lt

Hash-tabelites (näiteks Dartis, mida kasutatakse Flutteris) võivad võtmed olla ükskõik millise tüübi objektid, tingimusel et nad õigesti rakendavad hashCode ja == meetodeid. See on vajalik õige hash-väärtuse arvutamiseks ja võtmete võrdlemiseks.

Enamasti kasutatakse primitiivseid tüüpe, nagu stringid (String), numbrid (int), kuid võib kasutada ka kasutaja määratletud klasse, kui need meetodid on üle kirjutatud. Näiteks:

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

Seetõttu peavad võtmed olema muutumatud ja õigesti rakendama hashCode ja == meetodeid.