描述:下面的代码,按照逻辑来说,结果应该是:
{0=[2],1=[2,3],2=[2,3,4],3=[2,3,4,5],4=[2,3,4,5,6]}。
但其结果实际却是:
{0=[2, 3, 4, 5, 6], 1=[2, 3, 4, 5, 6], 2=[2, 3, 4, 5, 6], 3=[2, 3, 4, 5, 6], 4=[2, 3, 4, 5, 6]}
Map<Integer,List<Integer>> map = new HashMap<>();
List<Integer> list = new ArrayList<>();
for(int i = 0;i<5;i++){
list.add(i+2);
map.put(i,list);
}
System.out.println(map);
简单的debug一下:
上述操作可以看到,执行第一次add操作时,无异常,map正常存入了数据,在第二次add的时候,出现了问题,发现map中第一次存储的数据发生了变化。
解决方法:每次循环都创建一次新的对象,如下图
示例如下: