代码一:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Test {
public static void main(String args[]) {
List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();
Map<String, Object> map = new HashMap<String, Object>();
for(int i=0;i<5;i++) {
// Map<String, Object> map = new HashMap<String, Object>();
map.put("a", i);
map.put("b", i);
list.add(map);
}
System.out.println(list);
}
}
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Test {
public static void main(String args[]) {
List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();
// Map<String, Object> map = new HashMap<String, Object>();
for(int i=0;i<5;i++) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("a", i);
map.put("b", i);
list.add(map);
}
System.out.println(list);
}
}
代码一
[{a=4,b=4},{a=4,b=4},{a=4,b=4},{a=4,b=4},{a=4,b=4}]
代码二
[{a=0,b=0},{a=1,b=1},{a=2,b=2},{a=3,b=3},{a=4,b=4}]
代码一中,List<Map<String, Object>>里面存放的是map对象的地址,尽管循环了五次,但是每次的map对象对应的都是同一个地址,即listMap里面存放的是五个同样的map对象。
代码二中,每次循环的时候都实例化一个新的map对象,这样list在执行add方法的时候,每次都是存的不一样的map对象。
可以通过debug来观察list存放的map对象对应的id。如图:
代码一
代码二
通过上面的分析,我们可以知道,以后需要创建不同的map对象的时候,需要在循环里面进行map的创建。
而不是在循环体外面,因为List<Map<String, Object>>指向的是map对象的地址。