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:
- Calcula-se o hash da chave.
- Com base no hash, determina-se o balde (cesto) no array de baldes.
- No balde, armazena-se uma lista de pares chave-valor.
- 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.
- Se a chave coincidir, o valor é atualizado.
- 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