Sobes.tech
Junior — Middle

Que tipos de dados-chave são permitidos para uso em uma tabela de hash?

sobes.tech IA

Resposta da IA

Em tabelas de hash (por exemplo, em Dart, usado no Flutter), as chaves podem ser objetos de qualquer tipo, desde que implementem corretamente os métodos hashCode e ==. Isto é necessário para o cálculo correto do valor hash e comparação das chaves.

Normalmente, são utilizados tipos primitivos, como strings (String), números (int), mas também podem ser utilizados classes personalizadas se estes métodos forem sobrescritos. Por exemplo:

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

Assim, as chaves devem ser imutáveis e ter métodos hashCode e == corretamente implementados.