У меня есть несколько вопросов о перестройке HashMaps
при добавлении пары новых значений. Я задам вопросы на основе этих фактов (они верны для JVM Oracle, не уверены, являются ли они правильными для других JVM):
- Resize rebuilds
HashMap
будет иметь больший массив внутренних таблиц каждый раз, когда вы увеличиваете HashMap больше порога (threshold = loadFactor * numberOfEntries). Не имеет значения, в каком ковке добавляется вновь созданная запись - Карта все равно будет больше. Даже если все записи переходят в одно ведро (т.е. Их ключиhashCode()
возвращают одинаковый номер). -
HashMap
не уменьшается при удалении данных. Даже если все ключи удалены изHashMap
, внутренний размер таблицы не изменяется.
Теперь вопросы:
- Правильны ли эти факты?
Если они есть, то:
- Почему изменение размера реализовано таким образом? Является ли намерение выращивать внутренний стол, даже если он явно не нужен? Или ошибка?
- Почему он не сокращается?