Вам никогда не понадобится внутренняя реализация, и именно поэтому Джошуа Блох действительно скрывал это от нас. Я предпочитаю использовать HashMap
из стандартного класса API Java Collections для Hashtable
. Во-первых, это быстрее (не синхронизировано). Во-вторых, Hashtable
был в Java до того, как туда были добавлены реальные коллекции, а затем он был адаптирован (насколько я знаю).
Это выдержка из JavaDoc класса java.util.HashMap<K, V>
:
Экземпляр HashMap
имеет два параметра, влияющих на его производительность: начальная емкость и коэффициент загрузки . емкость - это количество сегментов в хэш-таблице, а начальная емкость - это просто емкость на момент создания хэш-таблицы. Коэффициент загрузки является мерой того, насколько полной хеш-таблице разрешено получать до того, как ее емкость будет автоматически увеличена. Когда количество записей в хэш-таблице превышает произведение коэффициента загрузки и текущей емкости, емкость примерно удваивается путем вызова метода rehash
.
Я думаю, это понятно. Карта с коэффициентом загрузки 0,75 и начальной емкостью 100 будет вставлять первые 75 новых записей карты без выделения памяти. Если вы добавите еще один элемент. Новый блок памяти с емкостью 200 выделяется, и существующие элементы копируются в эту новую память. Новое количество предметов, которые нужно получить, чтобы был выделен еще один блок памяти, теперь равно 150.
Более подробную информацию можно увидеть в исходном коде класса HashMap
.