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:
- Vypočíta sa hash kľúča.
- Na základe hash sa určí bucket (vedro) v poli bucketov.
- V bucketu je uložený zoznam párov kľúč-hodnota.
- Pri vkladaní novej hodnoty s rovnakým hashom Go prechádza prvky v bucketu a porovnáva kľúče pomocou funkcie rovnosti.
- Ak sa kľúče zhodujú, hodnota sa aktualizuje.
- 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