Junior — Middle
HashMap-те Bucket қолданғанда кілттердің қақтығысы қалай өңделеді?
sobes.tech AI
AI-дан жауап
Java-да HashMap коллизияларды өңдеу үшін бакет (bucket) деп аталатын деректер құрылымын пайдаланады, ол бастапқыда бірдей хешке ие элементтердің байланысқан тізімін білдіреді.
Екі кілт бірдей хешке ие болғанда (коллизия), олар екеуі де бір бакетке орналастырылады. Іздеу немесе енгізу кезінде осы бакеттің элементтері арқылы өтіп, кілттерді equals() әдісімен салыстырады.
Java 8-ден бастап, егер бакеттегі элементтер саны белгілі бір шектен асса (әдетте 8), байланысқан тізім теңдестірілген ағашқа (TreeMap) айналады, бұл іздеуді O(n)-ден O(log n)-ға дейін жылдамдатады.
Мысал:
HashMap<String, Integer> map = new HashMap<>();
map.put("key1", 1);
map.put("key2", 2); // егер key1 және key2 бірдей хешке ие болса, олар бір бакетте болады
Integer value = map.get("key1"); // бакеттің элементтері арқылы кілтті іздеу