TGStat
TGStat
Введите текст для поиска
Расширенный поиск каналов
  • flag Russian
    Язык сайта
    flag Russian flag English flag Uzbek
  • Вход на сайт
  • Каталог
    Каталог каналов и чатов Поиск каналов
    Добавить канал/чат
  • Рейтинги
    Рейтинг каналов Рейтинг чатов Рейтинг публикаций
    Рейтинги брендов и персон
  • Аналитика
  • Поиск по публикациям
  • Мониторинг Telegram
Библиотека собеса по Java | вопросы с собеседований

26 Jul, 14:11

Открыть в Telegram Поделиться Пожаловаться

❓ Как работает HashMap внутри? Что происходит при коллизии и при достижении load factor?

HashMap — массив бакетов (Node[] table). Ключ хешируется, хеш определяет индекс бакета: index = hash & (capacity - 1

Что происходит при put(key, value):

Считается hash(key) — не просто hashCode(), а с дополнительным перемешиванием старших битов ((h = key.hashCode()) ^ (h >>> 16)). Это снижает коллизии при маленьком размере таблицы.

Находится бакет по индексу. Если пустой — кладём первым. Если нет — коллизия.

🔹 Коллизия:

До Java 8 → связный список в бакете. Поиск O(n) в худшем случае.

С Java 8 → когда в бакете больше 8 элементов и capacity >= 64, список превращается в красно-чёрное дерево. Поиск становится O(log n). Обратно в список — при сжатии ниже 6 элементов.

// Упрощённо: Node в списке или TreeNode в дереве
static class Node {
final int hash;
final K key;
V value;
Node next;
}

🔹 Load factor и resize:

По умолчанию capacity = 16, loadFactor = 0.75. Порог = capacity * loadFactor = 12.

Как только элементов стало больше 12 — начинается resize(): таблица удваивается до 32, все элементы перераспределяются по новым бакетам. Это O(n) операция.

Поэтому если заранее знаете размер — задавайте начальную ёмкость:

// Хотим 1000 элементов без resize:
// 1000 / 0.75 ≈ 1334, берём следующую степень двойки
Map map = new HashMap(2048);

🐸 Библиотека собеса по Java

#core

830 0 10 2 8
Каталог
Каталог каналов и чатов Подборки каналов Поиск каналов Добавить канал/чат
Рейтинги
Рейтинг каналов Telegram Рейтинг чатов Telegram Рейтинг публикаций Рейтинги брендов и персон
API
API статистики API поиска публикаций API Callback
Наши каналы
@TGStat @TGStat_Chat @telepulse @TGStatAPI
Почитать
Академия TGStat Исследование Telegram 2019 Исследование Telegram 2021 Исследование Telegram 2023
Контакты
Справочный центр Поддержка Почта Вакансии
Всякая всячина
Пользовательское соглашение Политика конфиденциальности Публичная оферта
Наши боты
@TGStat_Bot @SearcheeBot @TGAlertsBot @tg_analytics_bot @TGStatChatBot