Junior — Middle
Дар кадом шароитҳо амалҳо дар HashMap дорои мураккабии вақти, ки ба андозаи коллексия нисбатан аст, мебошанд؟
sobes.tech AI
Ҷавоб аз AI
HashMap-да амалга оширишлар (масалан, get, put) одатда амортизирланган вақт мураккаблиги O(1). Бироқ баъзи ҳолларда, мураккаблик O(n) гача ошиши мумкин, бу ерда n жамланманинг ўлчами. Бу қуйидагича бўлади:
- Барча калитлар ёмон хеш функцияси туфайли бир қутига (bucket) тушади, бу узун рўйхат ёки дарахтга олиб келади.
- Коллизиялар тенг бўлмаган тарзда тақсимланмаган ва маълумот тузилмаси ичида деградлашади.
Java 8 ва ундан юқори версияларда, агар бир қутида жуда кўп элементлар бўлса, HashMap боғланган рўйхатни мувозанатли дарахтга (TreeNode) айлантиради, бу энг ёмон ҳолатни O(log n) га камайтиради, аммо O(1) га эмас.
Шунинг учун, амалга оширишлар жамланманинг ўлчамига нисбатан бўлади, кучли коллизиялар ва ёмон хеш тақсимоти ҳолларида.