Выделен размер Java HashMap - PullRequest
0 голосов
/ 20 февраля 2019

Java Hash Map имеет метод size (), который отражает количество элементов, установленных в Hash Map.Мне интересно знать, каков фактический размер Хеш-карты.Я пробовал разные методы, но не могу найти правильный.Я установил начальную емкость на 16

HashMap hm = new HashMap(16);
    for(int i=0;i<100;++i){
        System.out.println(hm.size());
        UUID uuid = UUID.randomUUID();
        hm.pet(uuid ,null);

    }

, когда я добавлю значения, которые этот размер может увеличить, как я могу проверить размер, который фактически выделен?

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Вы можете использовать Reflection, чтобы проверить фактический выделенный размер (размер сегмента) карты.

HashMap<String, Integer> m = new HashMap<>();
m.put("Abhi", 101);
m.put("John", 102);

System.out.println(m.size());   // This will print 2

Field tableField = HashMap.class.getDeclaredField("table");
tableField.setAccessible(true);
Object[] table = (Object[]) tableField.get(m);

System.out.println(table.length);  // This will print 16
0 голосов
/ 20 февраля 2019

каков фактический размер хэш-карты

Я предполагаю, что вы спрашиваете о емкости.Емкость - это длина массива, содержащего сегменты HashMap s.Начальная емкость по умолчанию равна 16.

Метод capacity не является общедоступным, но вы можете рассчитать текущую емкость на основе тока size, начальной емкости и коэффициента загрузки.

Если вы используете значения по умолчанию (например, когда вы создаете HashMap с конструктором без параметров), начальная емкость равна 16, а коэффициент загрузки по умолчанию равен 0,75.Это означает, что емкость будет удвоена до 32, как только размер достигнет 16 * 0,75 == 12. Он будет удвоен до 64, как только размер достигнет 32 * 0,75 == 24.

Если вы передадите другую начальную емкость и/ или коэффициент загрузки для конструктора, на расчет будут влиять соответственно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...