我对这些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,这样我每次都可以改变它们中的每一个而不影响其他的?
答案 0 :(得分:6)
你不想写
column.add(i, columns);
这会不断添加对同一HashMap
的引用。 column
将有9个对同一个对象的引用,所以当一个更改时,它们都会发生变化。
相反,你想要
column.add(i, new HashMap<Character, Integer>());
然后每次都添加一个新实例。