繁体   English   中英

初始化HashMap <Integer, List<Object> &gt;

[英]Initialize a HashMap<Integer, List<Object>>

我正在尝试填充hashmap的值

HashMap<Integer,List<Human>> hm=new HashMap<>(100);

for(int j=0;j<hm.size();j++)
{
    hm.put(j,new ArrayList<>());
}

但是当我这样做时:

Human x= new Human();
hm.get(3).add(x);

我明白了:

java.lang.NullPointerException

hm.size()为零 - 因为你没有放任何东西。 100参数只是初始化“启动容量”。

将循环更改为for(int j=0;j<100;j++)

你没有得到100hm.size()但是0 你没有得到你用该构造函数构建的内容。 您已使用该构造函数设置“initialCapacitiy”:

HashMap(int initialCapacity)

使用指定的初始容量和默认加载因子(0.75)构造一个空的HashMap。

但是HashMap.size()返回key-value元素的实际数量。

返回此映射中键 - 值映射的数量。

供你参考 :

HashMap的一个实例有两个影响其性能的参数:初始容量和负载因子。 容量是哈希表中的桶数,初始容量只是创建哈希表时的容量。 加载因子是在自动增加容量之前允许哈希表获取的完整程度的度量。 当哈希表中的条目数超过加载因子和当前容量的乘积时,哈希表将被重新哈希(即,重建内部数据结构),以便哈希表具有大约两倍的桶数。

相反,只需在循环中设置100即可实现List

Map<Integer,List<Human>> hm = new HashMap<>();
for(int j=0; j < 100; j++){
    hm.put(j,new ArrayList<>());
}

或者甚至更好,在某个地方使用常数

final static int NB_LIST = 100;

Map<Integer,List<Human>> hm = new HashMap<>();
for(int j=0; j < NB_LIST; j++){
    hm.put(j,new ArrayList<>());
}

hm.size()返回0,因为您仍然没有在hashmap中添加任何内容。 来自java网站:

返回此映射中键 - 值映射的数量。

你用一些初始大小初始化它,但你没有内部值,所以你的循环没有做任何事情。 如果你做1到100而不是1到大小它将按预期工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM