Выбор ответа Senior Коллекции изнутри обновлено

Начальная ёмкость HashMap

Вопрос

Нужно положить ровно 1000 элементов в HashMap без единого resize. Что передать?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: HashMap.newHashMap(1000) или new HashMap<(1334) под load factor. Аргумент конструктора это ёмкость таблицы, а resize происходит при превышении capacity × 0.75.

Варианты ответа

  1. new HashMap<>(1000): ёмкость ровно под число элементов
  2. HashMap.newHashMap(1000) или new HashMap<>(1334) под load factorправильный ответ
  3. new HashMap<>(1024): ближайшая степень двойки к 1000
  4. new HashMap<>(500): таблица всё равно удвоится один раз

Разбор

Аргумент конструктора это ёмкость таблицы, а resize происходит при превышении capacity × 0.75. Для 1000 элементов нужна ёмкость не меньше 1000 / 0.75 ≈ 1334, HashMap округлит её до 2048. new HashMap<>(1000) даст таблицу 1024 с порогом 768, и на 769-м элементе будет resize. Ровно эту арифметику делает фабрика HashMap.newHashMap(int numMappings), добавленная в Java 19.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме