zoukankan      html  css  js  c++  java
  • 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中实体的值都改变。造成这个结果的原因是,在这个实体中我没有设置唯一的主键,把一个字段设为主键,但是它是可以重复的,所以就会造成这样的结果。

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

  • 相关阅读:
    Linux 之 编译器 gcc/g++参数详解
    linux下history命令显示历史指令记录的使用方法
    Linux 命令之 Navicat 连接 Linux 下的Mysql数据库
    Linux命令
    CentOS 下安装
    CMD命令之 :修改windows的CMD窗口输出编码格式为UTF-8
    CTO、技术总监、首席架构师的区别
    PHP ServerPush (推送) 技术的探讨
    一个公司的管理层级结构
    Table of Contents
  • 原文地址:https://www.cnblogs.com/sansanboy/p/3603171.html
Copyright © 2011-2022 走看看