-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必要があります。そうしないと、参照を 1 つだけ追加し、変更するとすべてが変更されます。

于 2011-09-26T09:52:35.807 に答える