Во-первых, я хочу сказать, что в вашем случае вы определенно задумывались над этим. Однако, возможно, есть ситуации, когда кто-то захочет сделать это правильно. Итак, вот что я понимаю:
1) Количество элементов, которые вы можете хранить в своем HashSet = начальная емкость x коэффициент загрузки. Поэтому, если вы хотите иметь возможность удерживать n элементов, вам нужно сделать то, что сделал Zarkonnen , и разделить n на коэффициент загрузки.
2) Под прикрытием начальная емкость округляется до степени 2 за урок Oracle .
3) Коэффициент нагрузки должен быть не более 0,80, чтобы предотвратить чрезмерные столкновения, как отмечает Том Хоутин - tackline .
Если вы просто примете значения по умолчанию (начальная емкость = 16, коэффициент нагрузки = 0,75), вы в конечном итоге удвоите свой набор в 3 раза. (Начальный максимальный размер = 12, первое увеличение - емкость 32 и максимальный размер 24 (32 * .75), второе увеличение - емкость 64 и максимальный размер 48 (64 * .75), третье увеличение - емкость 128 и максимальный размер 96 (128). * .75).)
Чтобы приблизить ваш максимальный размер к 50, но при этом держать набор как можно меньше, рассмотрите начальную емкость 64 (мощность двух) и коэффициент загрузки 0,79 или более. 64 * .79 = 50,56, так что вы можете получить все 50 штатов. Если указать 32 <начальная емкость <64, начальная емкость будет округлена до 64, так что это то же самое, что указать 64 заранее. Указание начальной емкости <= 32 приведет к увеличению размера. Использование коэффициента загрузки <0,79 также приведет к увеличению размера, если ваша начальная емкость> 64.
Поэтому я рекомендую указать начальную емкость = 64 и коэффициент загрузки = .79.