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

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值