我对此代码有疑问,当我将地图对象添加到列表时,所有先前添加的对象都将被更改。我可以将地图声明为非静态吗?
for(Statment){
map.put(Key,value),
}
result.add(map);
答案 0 :(得分:1)
当您向容器添加内容时,您要添加引用(不是它引用的对象的副本)如果要添加副本(这样,如果您可以更改原始内容,并将副本添加到列表中)不改变)你必须明确地复制它。
e.g。
Map<Integer, Integer> map = new LinkedHashMap<Integer, Integer>();
for(int i=0;i<10;i++)
map.put(i, i);
list.add(new LinkedHashMap<Integer, Integer>(map)); // add a copy.
// you can change map without the list changing as well.
答案 1 :(得分:1)
试试这个。
for (condition) {
if (!map.containskey(key)) {
map.put(key,value);
}
}
result.add(map);
答案 2 :(得分:0)
您必须在for
之外声明每个对象,否则您只添加一个引用,并且任何修改都会修改所有对象。