2016-11-08 3 views
-3

В моей программе пары ключ-значение часто добавляются к Map до тех пор, пока не добавятся 1G пар. Изменение размера карты замедляет процесс. Как установить минимальный размер Map, например 1000000007 (что является простым)?Установить минимальный размер карты в Java

+7

Использовать конструктор, который принимает начальный размер? –

+0

Будет ли конструктор предотвращать изменение размера карты? – Stepan

+0

Я голосую, чтобы закрыть этот вопрос не по теме, потому что ОП не проводил никаких исследований вообще.Для этой цели есть конструктор. – f1sh

ответ

5

Конструктор HashMap берет начальный размер карты (и коэффициент нагрузки, если требуется).

Map<K,V> map = new HashMap<>(1_000_000_007); 
+1

См. [HashMap Constructor] (https://docs.oracle.com/ javase/8/docs/api/java/util/HashMap.html # HashMap-int-) для получения дополнительной информации, если этот ответ недостаточно ясен. –

+1

Я бы рекомендовал написать '1_000_000_007' для удобства чтения. – zyexal

3

Как я могу установить минимальный размер карты, например 1000000007 (который является первичным)?

Использование конструктора HashMap(int) или HashMap(int, float). Параметр int - это емкость.

HashMap должен иметь размер, который является простым для минимизации кластеризации.

Прошедшие и текущие варианты реализации HashMap конструктора будет все выбрать мощность, которая является наименьшей степенью 2 (до 2), которая больше или равна мощности, подаваемой. Поэтому использование простого числа не имеет никакого эффекта.

Будет ли конструктор предотвращать изменение размера карты?

HashMaps не изменяет размер.


(Обратите внимание, что размер и емкость разные вещи. Метод size() возвращает количество записей в настоящее время в Map. Вы не можете «установить» размер.)

+0

Собственно, это был его вопрос, а не как создать карту с начальным размером. –

+0

@ROMANIA \t Нет, начальный вопрос заключался в том, как создать карту с минимальным размером. Это прямо в вопросе. –

+0

@DaveNewton, это дискуссионно, но он хотел (согласно заголовку) установить ** Минимальный размер карты в Java **, а не ** Установить начальный размер карты в Java **. Это то, что я понимаю, - что он считал, что «HashMap» уменьшит свой размер во время некоторых действий, и он хотел исправить минимальный размер. –

2

может из вещей, которые вы должны отметить. Количество ведер в HashMap - это мощность 2 (может и не быть в будущем), следующая мощность 2 составляет 2^30. Коэффициент нагрузки определяет, при каком размере он должен вырастить карту. Обычно это 0,75.

Если вы зададите требуемый размер емкости, это будет;

  • раунд до следующей степени 2
  • еще может изменить размер, когда емкость * 0,75 достигается.
  • ограничено 2^30 в любом случае, так как это максимальная мощность 2, которую вы можете иметь для размера массива.

Будет ли конструктор предотвращать изменение размера карты?

Единственный способ сделать это - скопировать все элементы в новую карту. Это не делается автоматически.

+1

На самом деле, количество ведер в ** _ текущая реализация _ ** 'HashMap' - это мощность 2. Вероятно, это не изменится, но эта деталь реализации - это * не * часть договора интерфейса и не должна полагаться на. Это не всегда может быть силой 2. – AJNeufeld

Смежные вопросы