Если у меня есть набор ключей из 1000, какой размер подходит для моей хеш-таблицы и как это определяется?
Выбор подходящего размера таблицы для хэша
Ответы (6)
Это зависит от коэффициента загрузки (точки «процента заполнения», когда таблица увеличит свой размер и перераспределит свои элементы). Если вы знаете, что у вас ровно 1000 записей, и это число никогда не изменится, вы можете просто установить коэффициент загрузки на 1,0 и начальный размер на 1000 для максимальной эффективности. Если вы не уверены в точном размере, вы можете оставить коэффициент загрузки по умолчанию 0,75 и установить начальный размер 1334 (ожидаемый размер/LF) для действительно хорошей производительности по цене дополнительной памяти.
Вы можете использовать следующий конструктор для установки коэффициента загрузки:
Hashtable(int initialCapacity, float loadFactor)
Вы также должны учитывать хэш-функцию.
одно эмпирическое правило предлагает сделать размер таблицы примерно вдвое, чтобы было место для расширения, и, надеюсь, сохранить небольшое количество столкновений.
Другое эмпирическое правило состоит в том, чтобы предположить, что вы выполняете какое-то хеширование по модулю, затем округлить размер таблицы до следующего наибольшего простого числа и использовать это простое число в качестве значения по модулю.
Какие вещи вы хешируете? Более подробная информация должна давать лучший совет.
Эти факторы обсуждаются в документации для Hashtable
Пусть растут. При таком размере автомат работает нормально. В остальном 2 x размер + 1 — это простая формула. Простые числа тоже хороши, но как только ваш набор данных достигает определенного размера, реализация хеширования может решить перефразировать и увеличить таблицу.
Ваши ключи определяют эффективность и, надеюсь, достаточно различимы.
Итог: задавайте вопрос о размере, когда у вас есть проблемы, такие как размер или низкая производительность, кроме этого: не волнуйтесь!
Дважды хорошо.
У тебя нет большого набора ключей. Не беспокойтесь о сложных дискуссиях о вашей реализации HashTable и выбирайте 2000.
Я хотел бы повторить то, что https://stackoverflow.com/users/33229/wwwflickrcomphotosrene-germany сказано выше . 1000 не кажется мне очень большим хэшем. Я использовал много хеш-таблиц такого размера в java, не видя особых проблем с производительностью. И я почти никогда не заморачиваюсь с размером или коэффициентом загрузки.
Если вы запустили профилировщик своего кода и определили, что ваша проблема связана с хэш-таблицей, то, во что бы то ни стало, начните настройку. В противном случае я бы не стал предполагать, что у вас проблема, пока вы не будете уверены.
В конце концов, в большинстве кодов проблема производительности не там, где вы думаете. Я стараюсь не предвидеть.