Sobes.tech
Junior — Middle

Ar galite paaiškinti HashMap vidinę struktūrą ir veikimą Java kalboje?

sobes.tech AI

Atsakymas iš AI

Java HashMap yra duomenų struktūra, skirta saugoti raktų-reikšmių poras ir užtikrinti greitą prieigą per raktą.

Vidinė struktūra:

  • HashMap naudoja kibirų masyvą (bucket array).
  • Raktui apskaičiuojamas hashCode, kuris vėliau paverčiamas į masyvo indeksą.
  • Kiekviename kibire saugomi elementai su tuo pačiu indeksu, dažniausiai kaip susietas sąrašas arba medis (su Java 8, jei yra daug kolizijų).

Veikimas:

  • Pridedant objektą, indeksas apskaičiuojamas pagal rakto hash'ą.
  • Jei kibiras tuščias, elementas ten įdedamas.
  • Jei kibiras užimtas, tikrinama, ar raktai yra lygūs (equals), kad atnaujinti reikšmę arba pridėti naują elementą.
  • Paieška pagal raktą taip pat apskaičiuoja indeksą ir peržiūri elementus kibire, kad rastų atitikmenį.

Pavyzdys:

HashMap<String, Integer> map = new HashMap<>();
map.put("apple", 5);
int value = map.get("apple"); // 5

Taip HashMap užtikrina vidutinį prieigos laiką O(1), tačiau esant daug kolizijų, gali degraduoti iki O(n).