主要原因是对于堆栈的理解不够敏感,先上代码
List list = new ArrayList();
Map map = new HashMap();
List<MemberError> listMamber = ctx.getParam("LIST");
for(int i = 0;i<listMamber;i++){
MemberError memberError = listMamber.get(i);
map.put("xx1",memberError.getXx1());
map.put("xx2",memberError.getXx2());
...
list.add(map);
}
最后发现list每一条都是重复的
原因:List list = new ArrayList(); Map map = new HashMap(); 都是在方法栈创建list和map并指向堆中的对象。这样即使每次都list.add(map); 其实add的都是堆中同一个对象。 只要后面改动了这个map,那list中的就会改变,并且list.add(map);其实始终添加的是堆中的那同一个对象。
解决方法:很简单,在for循环里面Map map = new HashMap(); 即可,每次在堆中创建一个新的map,防止覆盖。