-5

我对这段代码有疑问,当我将地图对象添加到列表时,所有以前添加的对象都将被更改。如何将地图声明为非静态?

for(Statment){
   map.put(Key,value),                 
 }            
 result.add(map);
4

3 回答 3

1

当您向容器添加内容时,您正在添加引用(而不是它引用的对象的副本)如果您想添加副本(这样如果您可以更改原始内容,并且添加到列表中的副本不会更改) 你必须明确地复制它。

例如

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.
于 2011-09-26T09:51:25.720 回答
1

试试这个。

for (condition) {
   if (!map.containskey(key)) {
       map.put(key,value);
   }                 
}            
result.add(map);
于 2011-09-26T09:57:08.907 回答
0

您必须在之外声明每个对象,for否则您只会添加一个引用,并且任何修改都会修改所有引用。

于 2011-09-26T09:52:35.807 回答