Требование, чтобы размер таблицы был степенью двойки, является деталью реализации, не известной пользователям класса - поэтому c'tor молча корректирует значение на следующую большую степень двух вместо пометка ошибки.
В реализации Hashtable предполагается, что хеш может быть распределен неравномерно, поэтому он пытается использовать ряд двоичных элементов, которые являются простыми, в надежде избежать пиков в распределении частот хеша.
Сочетание этих двух деталей реализации приводит к снижению производительности.
(например, примитивная хеш-функция будет
int hash(String s, int nBins) {
return s[0] % nBins;
}
Если nBins равно 32, e
и E
заканчиваются в одном и том же бине, поэтому распределение значений хеш-функции коррелирует с распределением встречаемости букв, которое имеет четкие пики - поэтому распределение частоты будет иметь пик на 32.)