Можно ли создать в Java HashMap, который сохраняет свою начальную длину?

Я хочу создать hashMap

private Map<Integer,specificObject> myMap;
myMap = new HashMap <Integer,SpecificObject>(initialCapacity);

Возможно ли, что емкость myMap останется неизменной для всей программы? даже если мы достигли полной мощности.

4 ответа

Вы можете написать метод, который проверяет текущий размер hashmap и генерирует пользовательское исключение, если размер больше n, где n - максимальная емкость, которую вы хотите.

Теперь в коде добавьте вызов вышеупомянутому методу, прежде чем писать map.put.

Это гарантирует, что вы не добавите элементы на карту, когда она превысит ваш пользовательский лимит.

В то время как стандартная библиотека Java не имеет реализации кэша, ограничивающего размер, в Google Guava есть такой класс. Посмотрите на https://code.google.com/p/guava-libraries/wiki/CachesExplained. Кэш имеет тот же интерфейс, что и карта, с дополнительными функциями, такими как ограничение размера, время ожидания для записей и т. Д., Которые можно определить при создании кэша.

Вы можете реализовать такой класс самостоятельно. (Очевидный подход заключается в создании класса-обертки для HashMap который проверял размер карты, и так далее каждый раз, когда вы звонили put.)

Тем не менее, регулярный HashMap класс не работает таким образом. И кроме того, initialCapacity Параметр:

  • не размер карты,
  • не фактическое количество записей1, которые вы можете сохранить до того, как карта будет расширена, и
  • не предоставляется через доступную переменную или геттер.

1 - Это число определяется по формуле, включающей начальную емкость и коэффициент загрузки.

Во-первых, initialCapacity это не реальная емкость.

Когда вы проходите 12, емкость 16, что означает, что вы передаете, система будет использовать b >= a и в основном достигая 2^N,

Во-вторых, в hashmap есть factor = most num / all capacity, Например, если коэффициент = 0,5, а емкость равна 16, когда вы поместите 8 объектов, размер будет увеличиваться автоматически.

Другие вопросы по тегам