如何初始化Hashmap的arraylist?

时间:2015-03-08 22:51:41

标签: java arraylist hashmap

我对这些hashmap的arraylist真的很陌生。我想创建一个hashmap的arraylist,并动态地在循环中更改arraylist的元素。我的代码如下:

static List<HashMap<Character, Integer>> column = new ArrayList<HashMap<Character, Integer>>(9);
static HashMap<Character, Integer> columns = new HashMap<Character, Integer>();
for(int i=0;i<9;i++)//initialize?
    column.add(i, columns);
for(int i=0;i<9;i++) 
    column.get(i).put(b[xxx][xxx],(int)(b[xxx][xxx]));

起初我没有在这里使用for循环,我认为我在(9)的第一行初始化arraylist大小就足够了,但是当我尝试使用column.get(5).put(something)获取元素时,它给了我IndexOutOfBound的例外。

然后我尝试使用column.add(i, null);,但它给了我NullPointerException的例外。所以我改为column.add(i, columns);

但现在的问题是,当我尝试编辑column arraylist中的一个hashmap时,arraylist中的每个其他hashmap也会被更改,我猜它是因为它们被设置为首先是columns哈希映射?

所以我的问题是如何初始化hashmaps的arraylist,这样我每次都可以改变它们中的每一个而不影响其他的?

1 个答案:

答案 0 :(得分:6)

你不想写

column.add(i, columns);

这会不断添加对同一HashMap的引用。 column将有9个对同一个对象的引用,所以当一个更改时,它们都会发生变化。

相反,你想要

column.add(i, new HashMap<Character, Integer>());

然后每次都添加一个新实例。