Sobes.tech
Middle+

Hash bol vypočítaný, bucket nájdený, vložená nová hodnota. Čo sa stane, keď príde nová hodnota s rovnakým hashom (kolízia)?

sobes.tech AI

Odpoveď od AI

V Go, keď pracujete s mapami, keď dôjde ku kolízii hashov (rôzne kľúče majú rovnaký hash), používa sa metóda chainingu (reťazenie) vo vnútri bucketu.

Algoritmus je približne takýto:

  1. Vypočíta sa hash kľúča.
  2. Na základe hash sa určí bucket (vedro) v poli bucketov.
  3. V bucketu je uložený zoznam párov kľúč-hodnota.
  4. Pri vkladaní novej hodnoty s rovnakým hashom Go prechádza prvky v bucketu a porovnáva kľúče pomocou funkcie rovnosti.
  5. Ak sa kľúče zhodujú, hodnota sa aktualizuje.
  6. Ak je kľúč nový, prvok sa pridá do zoznamu v bucketu.

Týmto spôsobom sú kolízie riešené ukladaním viacerých prvkov do jedného bucketu a sekvenčným porovnávaním kľúčov.

Príklad:

m := make(map[string]int)
m["key1"] = 1
m["key2"] = 2 // key2 môže mať rovnaký hash ako key1
// Pri vkladaní key2 Go skontroluje bucket a pridá alebo aktualizuje hodnotu