我对这段代码有疑问,当我将地图对象添加到列表时,所有以前添加的对象都将被更改。如何将地图声明为非静态?
for(Statment){
map.put(Key,value),
}
result.add(map);
我对这段代码有疑问,当我将地图对象添加到列表时,所有以前添加的对象都将被更改。如何将地图声明为非静态?
for(Statment){
map.put(Key,value),
}
result.add(map);
当您向容器添加内容时,您正在添加引用(而不是它引用的对象的副本)如果您想添加副本(这样如果您可以更改原始内容,并且添加到列表中的副本不会更改) 你必须明确地复制它。
例如
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.
试试这个。
for (condition) {
if (!map.containskey(key)) {
map.put(key,value);
}
}
result.add(map);
您必须在之外声明每个对象,for
否则您只会添加一个引用,并且任何修改都会修改所有引用。