Итак:
static final int DEFAULT_INITIAL_CAPACITY = 16;
Начальная емкость хеш-таблицы
static final int MAXIMUM_CAPACITY = 1 << 30;
Максимальная емкость хеш-таблицы - составляет 2^29
static final float DEFAULT_LOAD_FACTOR = 0.75f;
Фактор загрузки по умолчанию
transient Entry[] table;
Массив бакетов. Его длина всегда должна быть степенью двойки. Этот массив автоматически увеличивается вдвое, если фактор загрузки превышен.
transient int size;
Количество мэппингов, которые содержатся в данной хеш-таблице.
int threshold;
Пороговое значение, следующее значение размера количества мэппингов, по достижении которого размер хеш-таблицы (а точнее, размер массива бакетов) будет увеличен. Рассчитывается как (емкость * фактор_загрузки).
final float loadFactor;
Значение фактора загрузки для данной хеш-таблицы.
transient volatile int modCount;
Количество структурных модификаций, которые произошли над данной хеш-таблицей. Это поле используется итераторами, чтобы отследить, когда нужно будет выкинуть ConcurrentModificationException.
private transient Set<Map.Entry<K,V>> entrySet = null;
Представление хеш-таблицы в виде множества Entry.
Как видим, полей не очень много.
Устройство java.util.HashMap. Часть 1.
Устройство java.util.HashMap. Часть 3.
Устройство java.util.HashMap. Часть 4.
1 << 30 == 2^30, а не 2^29
ОтветитьУдалить