List使用add方法时,生成的list是最后加入的数据的重复

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/urnot/article/details/82377891

  近来项目中用到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);
				}
			}

 

阅读更多
换一批

没有更多推荐了,返回首页