List使用add方法时,生成的list是最后加入的数据的重复
程序员文章站
2022-06-04 10:42:05
...
近来项目中用到list的add方法,执行报错,添加重复项,debug以后发现生成的list中,都是最后一条数据的重复。后来发现只需要改一句就可以避免这个错误。
MachineBean machineBean = new MachineBean();
List list = this.machineManager.getMachine(machineBean);
List<InfoBean> saveList = new ArrayList<InfoBean>();
InfoBean infoBean = new InfoBean();
if(list!=null&list.size()!=0){
for (int i=0;i<list.size();i++) {
machineBean=(MachineBean) list.get(i);
infoBean.setId(machineBean.getId());
infoBean.setIsvalid("1");
infoBean.setCjr("1");
saveList.add(infoBean);
}
}
其实一开始new了一个InfoBean对象,就只是创建了一个唯一的ID,在将对象add进list时,list就只是添加了一个对象的引用,尽管set对象,改变了属性,但是其ID还是唯一的,list又只是对于对象唯一ID的引用。所以结果就是重复添加了对象。
要避免这个错误,我们就把new对象放到循环中,每次循环都创建一个对象,这样ID不唯一了。
MachineBean machineBean = new MachineBean();
List list = this.machineManager.getMachine(machineBean);
List< InfoBean> saveList = new ArrayList< InfoBean>();
if(list!=null&list.size()!=0){
for (int i=0;i<list.size();i++) {
InfoBean InfoBean = new InfoBean();
machineBean=(MachineBean) list.get(i);
InfoBean.setId(machineBean.getId());
InfoBean.setConfigkey(configkey);
InfoBean.setConfigvalue(configvalue);
InfoBean.setIsvalid("1");
InfoBean.setCjr(getSessionSysuser(request).getYhdh());
InfoBean.setCjsj(DateTools.getSysDate19());
saveList.add( InfoBean);
}
}