Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Java: map, hash, collision

Как работает HashMap? Какие механизмы обеспечивают константную сложность поиска?

Вопрос проверяет знание внутренней работы HashMap и механизмов хеширования.

Короткий ответ

HashMap хранит данные в корзинах (buckets), используя хеш-код ключа. Константная сложность O(1) достигается за счёт:

  1. Хорошей хеш-функции.

  2. Маленькой нагрузки (load factor).

  3. Преобразования списков в деревья при коллизиях (Java 8+).

Длинный ответ

1. Основные принципы:

  • Данные хранятся в массиве Node<K,V>[].

  • Индекс корзины: hash(key) % capacity.

2. Решение коллизий:

  • До Java 8: связные списки в корзинах.

  • Java 8+: при большом количестве коллизий список преобразуется в красно-чёрное дерево (O(log n) вместо O(n)).

Пример:

Map<String, Integer> map = new HashMap<>();
map.put("a", 1); // Хеш "a" определяет корзину

Оптимизации:

  • Load factor (по умолчанию 0.75): когда размер превышает capacity * load factor, массив удваивается.

  • Хеш-функция: Object.hashCode() может переопределяться для равномерного распределения.

Уровень

  • Рейтинг:

    2

  • Сложность:

    5

Навыки

  • Java

    Java

Ключевые слова

#map

#hash

#collision

Подпишись на Java Developer в телеграм