SET LIST 等向迭代器转换时,迭代器时指向的引用

原创 2007年09月12日 19:39:00

前段时间做指标的修改时,遇到了一个问题:如果原指标中存在,现在要修改这个指标,将其删掉,会出先一个异常.有时可以删掉其中的一个,有时一个也删除不了.经过别人的指引,终于解决了,现在将一个问题写下来.

 源程序:

PO中存放的时原指标.VO 中存放的时新指标.将PO VO 进行对比,由此决定操作

 

//branch 1: 删除PO中存在,VO中不存在的指标
    
    for (Iterator i=indPOSet.iterator();i.hasNext();) {
     mpiPO = (MarketPlanIndicatorPO)i.next();
     isExist = false;
     for (Iterator i2=indVOSet.iterator();i2.hasNext();) {
      mpiVO = (MarketPlanIndicatorVO)i2.next();
      if (null != mpiVO.getIndicatorId() && mpiVO.getIndicatorId().longValue() == mpiPO.getIndicatorId().longValue()) {
       isExist = true;
       break;
      }
     }
     if (isExist) {
      //如果指标还存在,更新指标
      ObjectTranslate.transVO2PO(mpiVO,mpiPO);
     } else {
      //如果指标不存在,删除指标
      indPOSet.remove(mpiPO);
     }
    } 

 问题在于indVOSet里的数据经过iterator()操作后Iterator i2只是存放indVOSe的一个引用,同理,indPOSet也是.这样当我们在删除mpiPO时,只是删除了迭代器i的一个引用,并没有真正的删除一个指标.当进行下一轮的比较时.删除引用的部位是指向一个空引用,因此会抛出一个异常.为了解决这个问题,就要防止空应用的比较.为此该用数据比较,而不是迭代器

修改后的源代码:

  //branch 1: 删除PO中存在,VO中不存在的指标
    MarketPlanIndicatorPO[] mpiPOArray = (MarketPlanIndicatorPO[])indPOSet.toArray(new MarketPlanIndicatorPO[0]);
    for (int i=0;i<mpiPOArray.length;i++) {
     mpiPO = (MarketPlanIndicatorPO)mpiPOArray[i];
     isExist = false;
     for (Iterator i2=indVOSet.iterator();i2.hasNext();) {
      mpiVO = (MarketPlanIndicatorVO)i2.next();
      if (null != mpiVO.getIndicatorId() && mpiVO.getIndicatorId().longValue() == mpiPO.getIndicatorId().longValue()) {
       isExist = true;
       break;
      }
     }
     if (isExist) {
      //如果指标还存在,更新指标
      ObjectTranslate.transVO2PO(mpiVO,mpiPO);
     } else {
      //如果指标不存在,删除指标
      indPOSet.remove(mpiPO);
     }
    }

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

【14】集合1_集合框架,迭代器,List集合,Set集合

7.1集合框架   为什么出现集合类? 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式。   数组和集合类同是容器,有何不同...

黑马程序员_Java第14天知识总结_集合类(集合框架)_Collection_迭代器_List_Set_HashSet

------- android培训、java培训、期待与您交流! ---------- 今天学习的知识点: 集合类(集合框架)_Collection_迭代器_List_ArrayList_Link...

Scala 数组(Array),列表(List),元组(Tuple),集(Set),映射(Map),迭代器(Iterator)

1. 数组(Array)数组是编程中经常用到的数据结构,一般包括定长数组和变长数组。本教程旨在快速掌握最基础和常用的知识,因此,只介绍定长数组。定长数组,就是长度不变的数组,在Scala中使用Arra...

JAVA基础 day14 集合框架 迭代器 List和Set常用子类应用

集合框架: 为了方便对多个对象进行操作,就对对象进行存储。集合就是存储对象最常用的方式之一。集合长度是可变的,并且可以存储不同类型的对象。集合在util包中。集合框架的大概描述。 最顶层是col...

黑马程序员_JAVA学习日记_JAVA中API:集合框架1(Collection,List,Set及其子类和迭代器的应用)

黑马程序员-学习日记   黑马程序员_JAVA中集合框架1(Collection,List,Set及其子类和迭代器的应用)   ------- android培训、java培训、期待与您交流!...

Java中Vector、List、Set集合、Iterator迭代器的使用

Java 中Vector的使用import java.util.*; public class java_test { public static void main(String[] arg...

java无重集合Set<T>与迭代器Iterator<T>

Set是T型元素的集合,集合中不允许包含xiang'deng'yuan'su

List (迭代器)

1 List的迭代遍历是List中最常用的操作。说到遍历,就不得不提Java里的迭代器了。由于Java中数据容器众多,而对数据容器的操作在很多时候都具有极大的共性,于是Java采用了迭代器为各种容器提...

Java中Vector、ArrayList、List使用深入剖析,迭代器

http://blog.csdn.net/cecoo/article/details/2311909 线性表,链表,哈希表是常用的数据结构,在进行Java开发时,JDK已经为我们提供了一系列相应的类...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)