[英]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++)
你没有得到100
与hm.size()
但是0
。 你没有得到你用该构造函数构建的内容。 您已使用该构造函数设置“initialCapacitiy”:
使用指定的初始容量和默认加载因子(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.