List迭代循环时出现分问题

本文探讨了在迭代过程中重新赋值实体时可能导致的数据污染问题,详细解释了原因并提供了解决方案。

一个List,通过迭代之后给List中的实体重新赋值,代码如下

 1 public List getListByPage(Page currPage) { 
 2         Map recordTypeMap = BusnDataDir.recordTypeMap; 
 3         List infoList = currPage.getQueryResult(); 
 4         List<CollectNewsGroup> info = new ArrayList<CollectNewsGroup>(); 
 5         Iterator itr = infoList.iterator(); 
 6         while (itr.hasNext()){ 
 7             CollectNewsGroup news = new CollectNewsGroup(); 
 8             
 9             news =     (CollectNewsGroup) itr.next(); 
10             
11             String userId = news.getUser(); 
12             String recordType = news.getRecordType(); 
13             
14             SysUser sysUser = (SysUser) operInfoDAO.getObject(SysUser.class, userId); 
15             String userName = sysUser.getUsername(); 
16             
17             
18             
19             String recordTypeName = (String) recordTypeMap.get(recordType); 
20             news.setUser(userName); 
21             news.setRecordType(recordTypeName); 
22             
23             info.add(news); 
24             
25         } 
26         
27         return info; 
28     }

 

可是,当第一次循环之后,infoList 中的别的实体的值也变了,因为是二次开发,参照以前的代码实现,Debug以前的程序是没有问题的,所以百思不得其解,今天早上又打开程序,Debug进去,一看,才明白其中的原因:截图如下:

image

 

仔细观察,就会看见,Object中的id=133,有多项是相同的,即迭代重新赋值的时候,会把同一id中实体的值都改变。造成这个结果的原因是,在这个实体中我没有设置唯一的主键,把一个字段设为主键,但是它是可以重复的,所以就会造成这样的结果。

总而言之,对有些问题还是要深入的了解,如果明白迭代循环的原理就不会出现这样的情况了。

转载于:https://www.cnblogs.com/sansanboy/p/3603171.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值