我正在尝试填充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
答案 0 :(得分:4)
hm.size()为零 - 因为你没有放任何东西。 100参数只是初始化&#34;启动容量&#34;这里。
将您的循环更改为for(int j=0;j<100;j++)
答案 1 :(得分:2)
100
hm.size()
但0
未获得key-value
。你没有得到你用该构造函数构建的内容。您已使用该构造函数设置“initialCapacitiy”:
使用指定的初始容量和默认加载因子(0.75)构造一个空的HashMap。
但HashMap.size()
会返回100
元素的实际数量。
返回此映射中键 - 值映射的数量。
供您参考:
HashMap的一个实例有两个影响其性能的参数:初始容量和负载因子。容量是哈希表中的桶数,初始容量只是创建哈希表时的容量。加载因子是在自动增加容量之前允许哈希表获取的完整程度的度量。当哈希表中的条目数超过加载因子和当前容量的乘积时,哈希表将被重新哈希(即,重建内部数据结构),以便哈希表具有大约两倍的桶数。
相反,只需在循环中设置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<>());
}
甚至更好,在
之类的地方使用常量keys = [next(iter(x)) for x in dictionary]
res = keys[keys.index('b')+1:]
# ['c', 'd']
答案 2 :(得分:1)
hm.size()返回0,因为您仍未在hashmap中添加任何内容。来自java网站:
返回此映射中键 - 值映射的数量。
你用一些初始大小初始化它但你没有内部值,所以你的for循环没有做任何事情。如果以1到100而不是1来调整它,它将按预期工作。