初始化HashMap <integer,list <object =“”>&gt;

时间:2018-03-23 12:03:53

标签: java

我正在尝试填充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

3 个答案:

答案 0 :(得分:4)

hm.size()为零 - 因为你没有放任何东西。 100参数只是初始化&#34;启动容量&#34;这里。

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

答案 1 :(得分:2)

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

HashMap(int initialCapacity)

  

使用指定的初始容量和默认加载因子(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来调整它,它将按预期工作。