`

关于Iterator使用时应该注意的一个小问题

阅读更多

今天在用java编程时遇到一个小问题,记下来备忘:

Iterator迭代器是遍历List等容器时经常用到的,在使用时一定要注意,如果为Iterator对象进行了初始化或者赋值,那么一旦与Iterator对象关联的容器对象发生变化,则原来的Iterator对象失效,需要重新赋值。

下面举例说明:

 

ArrayList<Integer> list=new ArrayList<Integer>();	 //创建一个ArrayList对象
Iterator<Integer> iterator=list.iterator()		//创建Iterator对象,并对其初始化

//为list填充数据
while(distance>0){
	list.add(distance);
	distance=(distance-1)/3;
}

while(iterator.hasNext()){ //错误,此处的iterator失效,不能调用hasNext()函数
	......
}

 

  而下面是正确的写法:

 

ArrayList<Integer> list=new ArrayList<Integer>();
Iterator<Integer> iterator;//这里没有为Iterator对象赋值
				
while(distance>0){
	list.add(distance);
	distance=(distance-1)/3;
}
iterator=list.iterator();//这里为Iterator对象赋值
while(iterator.hasNext()){
	......
}
 

分享到:
评论

相关推荐

    VisitorPattern:CS100 Lab8-使用Visitor模式和Iterator模式的操作数计数器的实现

    UnaryIterator:此迭代器由具有一个子级(例如装饰器)的表达式树类创建,并在其第一次迭代时返回唯一的子级 PreorderIterator:此迭代器由用户创建以遍历整个表达式树。 请注意,它将跳过表达式树中的第一个节点,...

    【JDK1.8源码剖析】外部迭代器Iterator接口

    文章目录Iterator源码剖析(一)简介(二)源码分析 Iterator源码剖析 (一)简介 Iterabtor是从jdk1.2就存在的接口,称为外部迭代器。支持对容器中的元素进行遍历和移除,还支持流式遍历 ... // 返回下一个元素

    effective stl stl 技巧

    条款29:需要一个一个字符输入时考虑使用istreambuf_iterator 算法 条款30:确保目标区间足够大 条款31:了解你的排序选择 条款32:如果你真的想删除东西的话就在类似remove的算法后接上erase 条款33:提防在...

    abstract-iterator:向abstract-nosql数据库添加search(iterator)功能

    选项对象(注意:某些选项取决于Iterator的实现) db :与db参数相同 'next' :确保readStream返回键大于键的原始键数据。 请参阅'last'事件。 注意:这会影响range [gt / gte或lt / lte(reverse)]选项。 '...

    二十三种设计模式【PDF版】

    的被使用,被调用,而是深刻的介入到一个领域中去,J2EE 等框架软件设计的目的是将一个领域中不变的东西先定义好,比如 整体结构和一些主要职责(如数据库操作 事务跟踪 安全等),剩余的就是变化的东西,针对这个领域...

    实验05 Java集合.doc

    1、编写程序练习将以下5个Person类的对象放在一个HashSet中。 姓名:张三 身份证号:178880001 姓名:王五 身份证号:178880002 姓名:李四 身份证号:178880003 姓名:王五 身份证号:178880002 姓名:李四 身份证...

    STL实践指南.rar

    这篇文章从STL的基础知识讲起,循序渐进,逐步深入,涉及到了STL编写代码的方法、STL代码的编译和调试、命名空间(namespace)、STL中的...作者在这篇文章中对读者提出了一些建议,并指出了使用STL时应该注意的问题。

    WINDOWS STL编程

    ISO字符串、各种不同类型的容器(container)、模板(template)、游标(Iterator)、算法(Algorithms)、分配器(Allocator)、容器的嵌套等方面的问题,作者在这篇文章中对读者提出了一些建议,并指出了使用STL时...

    Effective STL(中文)

    需要一个一个字符输入时考虑使用istreambuf_iterator 算法 条款30:确保目标区间足够大 条款31:了解你的排序选择 条款32:如果你真的想删除东西的话就在类似remove的算法后接上erase 条款33:提防在...

    java 面试题 总结

    Stateful Session Bean 与 Stateless Session Bean ,这两种的 Session Bean都可以将系统逻辑放在 method之中执行,不同的是 Stateful Session Bean 可以记录呼叫者的状态,因此通常来说,一个使用者会有一个相对应...

    STL 入门最全的资料

    ISO字符串、各种不同类型的容器(container)、模板(template)、游标(Iterator)、算法(Algorithms)、分配器(Allocator)、容器的嵌套等方面的问题,作者在这篇文章中对读者提出了一些建议,并指出了使用STL时...

    JDKAPI18CN(中文版)

    iterator和listIterator方法是快速失败的 :如果列表在任何时间从结构上修改创建迭代器之后,以任何方式除非通过迭代器自身remove种或add方法,迭代器都将抛出一个ConcurrentModificationException 。 因此,面对...

    ArrayList.java

    官方翻译:大小可变数组实现List接口的。 实现了所有可选列表操作,并允许所有... 因此,这将是错误的,写一个程序,依赖于此异常的它的正确性: 迭代器的快速失败行为应该仅用于检测bug。 这个类是成员的Java集合框架

    effective stl 中文 pdf

    条款29: 需要一字符一字符输入时请用istreambuf_iterator 算法 条款30: 确保目的范围足够大 条款31: 了解你的排序选项 条款32: 如果你真的想删除东西的话在remove-like的算法后紧接上erase 条款33: 当心在包含...

    超级有影响力霸气的Java面试题大全文档

    Stateful Session Bean 与 Stateless Session Bean ,这两种的 Session Bean都可以将系统逻辑放在 method之中执行,不同的是 Stateful Session Bean 可以记录呼叫者的状态,因此通常来说,一个使用者会有一个相对应...

    Effictive STL CHM中文版

    条款29: 需要一字符一字符输入时请用istreambuf_iterator 算法 条款30: 确保目的范围足够大 条款31: 了解你的排序选项 条款32: 如果你真的想删除东西的话在remove-like的算法后紧接上erase 条款33: 当心在包含...

    eenext:用于下一代的EventEmitter,在TypeScript中具有很好的类型,并支持Promise和AsyncIterator

    继续用于下一代的EventEmitter ,在TypeScript中具有很好的类型,并支持Promise和AsyncIterator安装NPM: $ npm install eenext 纱: $ yarn add eenext 注意:该软件包使用setImmediate ,因此您可能需要使用core-...

    C++入门到精通

    置数组类型互相作用 这一章以一个使用泛型算法的程序设计作为开始 第 6 章介绍的iterator 迭代器 在第 12 章将进一步讨论 因为它们为泛型算法与实际容器的绑定提供了粘合剂 这一章也介绍并解释了函数对象的概念 ...

    C#23种设计模式_示例源代码及PDF

    代理模式 代理模式给某一个对象提供一个代理对象, 代理就是一个人或一个机构代表另一个人或者一个机构采取行动。某些情况下,客户 不想 或者不能够直接引用一个对象, 代理对象可以在客户和目标对象直接起到中介的...

Global site tag (gtag.js) - Google Analytics