List使用add方法時,生成的list是最後加入的資料的重複
阿新 • • 發佈:2019-02-01
近來專案中用到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); } }