欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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);
				}
			}

 

相关标签: list add