Sobes.tech
Middle+

O hash foi calculado, o bucket encontrado, um novo valor foi inserido. O que acontece quando chega um novo valor com o mesmo hash (colisão)?

sobes.tech IA

Resposta da IA

Em Go, ao trabalhar com mapas, quando ocorre uma colisão de hashes (chaves diferentes têm o mesmo hash), é utilizado o método de encadeamento (chaining) dentro do balde.

O algoritmo é aproximadamente assim:

  1. Calcula-se o hash da chave.
  2. Com base no hash, determina-se o balde (cesto) no array de baldes.
  3. No balde, armazena-se uma lista de pares chave-valor.
  4. Ao inserir um novo valor com o mesmo hash, o Go percorre os elementos no balde e compara as chaves usando uma função de igualdade.
  5. Se a chave coincidir, o valor é atualizado.
  6. Se a chave for nova, o elemento é adicionado à lista do balde.

Dessa forma, as colisões são tratadas armazenando vários elementos em um mesmo balde e comparando as chaves sequencialmente.

Exemplo:

m := make(map[string]int)
m["key1"] = 1
m["key2"] = 2 // key2 pode ter o mesmo hash que key1
// Ao inserir key2, o Go verificará o balde e adicionará ou atualizará o valor