Sobes.tech
Junior — Middle

Jak se určuje doba práce při kolizích v HashMap?

sobes.tech AI

Odpověď od AI

V Java je průměrná doba operací (například get, put) v HashMap díky hashování klíčů O(1). Nicméně při kolizích (kdy různé klíče mají stejný hash) jsou prvky uloženy ve stejném koši (bucket).

Dříve, v Java (do verze 8), při kolizích byly prvky v koši uloženy jako spojový seznam, což zhoršovalo dobu přístupu na O(n) v nejhorším případě, pokud všechny prvky spadly do jednoho koše.

Od Java 8, když je dosažen určitý práh prvků v koši (obvykle 8), je spojový seznam převeden na vyvážené stromové struktury (například červené-černé stromy). To zlepšuje dobu přístupu na O(log n) v nejhorším případě.

Tedy, při přítomnosti kolizí se mění doba práce HashMap:

  • Málo kolizí — doba blízko O(1)
  • Hodně kolizí — doba se může zhoršit na O(log n) díky stromu

Příklad:

Map<String, String> map = new HashMap<>();
map.put("key1", "value1");
map.put("key2", "value2");
String val = map.get("key1");

Pokud "key1" a "key2" mají stejný hash, spadnou do stejného koše a hledání probíhá přes strukturu uvnitř koše.