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