package test;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class TestListSize {
public static void main(String[] args) {
List list = new ArrayList<>();

Map<String,Object> map = new HashMap<String,Object>();

for  (int i = 0; i < 10; i++) {
map.put("test", i);
System.out.println("map: "+map);
list.add(map);
System.out.println("list: "+list);
}
System.out.println(list);

}
}以上这是源代码map: {test=0}
list: [{test=0}]
map: {test=1}
list: [{test=1}, {test=1}]
map: {test=2}
list: [{test=2}, {test=2}, {test=2}]
map: {test=3}
list: [{test=3}, {test=3}, {test=3}, {test=3}]
map: {test=4}
list: [{test=4}, {test=4}, {test=4}, {test=4}, {test=4}]
map: {test=5}
list: [{test=5}, {test=5}, {test=5}, {test=5}, {test=5}, {test=5}]
map: {test=6}
list: [{test=6}, {test=6}, {test=6}, {test=6}, {test=6}, {test=6}, {test=6}]
map: {test=7}
list: [{test=7}, {test=7}, {test=7}, {test=7}, {test=7}, {test=7}, {test=7}, {test=7}]
map: {test=8}
list: [{test=8}, {test=8}, {test=8}, {test=8}, {test=8}, {test=8}, {test=8}, {test=8}, {test=8}]
map: {test=9}
list: [{test=9}, {test=9}, {test=9}, {test=9}, {test=9}, {test=9}, {test=9}, {test=9}, {test=9}, {test=9}]
[{test=9}, {test=9}, {test=9}, {test=9}, {test=9}, {test=9}, {test=9}, {test=9}, {test=9}, {test=9}]以上是控制台输出的为什么list中已经存进去的(test=0)在后面会被改变成(test=1)???

解决方案 »

  1.   

    你每次放的都是map进去。。map是同一个对象。。map put的时候 键都是test,key相同,value不同的话后来的就把前面的替换掉了。
      

  2.   

    你希望得到的效果正确的写法是将Map<String,Object> map = new HashMap<String,Object>();这句放到循环体里面去。否则map这个句柄始终指向一个对象,并且list中的每个成员都是指向这个对象。
      

  3.   

    本来就是这样,想变就把map放循环里面吧
      

  4.   

    Map实例hashMap 中键和值是可以重复的,如果之前存在,新的会替换旧的,替换后任然是存在的