Sobes.tech
Junior — Middle

Kokie raktinių duomenų tipai leidžiami naudoti maišos lentelėje?

sobes.tech AI

Atsakymas iš AI

Heshų lentelėse (pavyzdžiui, Dart, naudojamas Flutter) raktai gali būti bet kokio tipo objektai, jei jie teisingai įgyvendina hashCode ir == metodus. Tai būtina teisingam hash reikšmės apskaičiavimui ir raktų palyginimui.

Dažniausiai naudojami pirminiai tipai, tokie kaip eilutės (String), skaičiai (int), tačiau galima naudoti ir naudotojo apibrėžtus klases, jei šie metodai yra perrašyti. Pavyzdžiui:

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] = 'Kūrėjas';
  print(map[p]); // Kūrėjas
}

Todėl raktai turi būti nekintami ir teisingai įgyvendinti hashCode ir == metodus.