Sobes.tech
Junior — Middle

Co se stane, pokud vložíte do HashMap dvě klíče se stejným hash kódem, ale odlišnými hodnotami equals?

sobes.tech AI

Odpověď od AI

V HashMap v Javě jsou klíče uloženy v koších indexovaných podle hash kódu. Pokud mají dva klíče stejný hash kód, spadnou do stejného koše, ale pro určení jedinečnosti se používá metoda equals.

Pokud vložíte dva klíče se stejným hash kódem, ale které nejsou podle equals shodné, HashMap uloží oba klíče jako různé záznamy ve stejném koši.

Příklad:

Map<Key, String> map = new HashMap<>();
Key key1 = new Key(1); // hashCode = 42
Key key2 = new Key(2); // hashCode = 42, ale !key1.equals(key2)

map.put(key1, "value1");
map.put(key2, "value2");

System.out.println(map.size()); // 2

Tím pádem, stejný hash kód neznamená stejné klíče. HashMap nejdříve hledá v koši podle hash kódu, a poté porovnává klíče přes equals. Pokud equals vrátí false, klíč je považován za nový a je přidán do kolekce.