上一篇已经说过了Iterator迭代器的原理是使用内部类实现的,现在说说
迭代器的取值方式和对元素操作的注意事项:
1.迭代器的取值方式一般有两种:
public class IteratorDemo { public static void main(String[] args) { Collection coll = new ArrayList(); coll.add("abc1"); coll.add("abc2"); coll.add("abc3"); coll.add("abc4"); Iterator it1 = coll.iterator(); // next方法自动往下取元素. // 当取到了不存在的元素。NoSuchElementException //取法一 while (it1.hasNext()) { System.out.println(it1.next()); } System.out.println(it1.hasNext()); //false 但it1还有 Collection coll2 = new ArrayList(); coll2.add("abc1"); coll2.add("abc2"); coll2.add("abc3"); coll2.add("abc4"); //常用的取法二 for (Iterator it = coll2.iterator(); it.hasNext(); ){ System.out.println (it.next()+"----------"); } } }
2.Iterator迭代器在取值时的请注意不要同时使用集合增加,修改元素:
/* 在迭代过程中,如果使用集合对象继续操作元素,有可能发生ConcurrentModificationException。 所以,需要做的是要么使用集合对象操作元素, 要么使用迭代器操作元素。不要同时使用。 在迭代过程中如果需要操作元素,可以使用迭代器的方法。 但是很遗憾,Iterator中只有对元素的判断,获取,删除操作, 这是就需要使用Iterator对象子接口来实现。就是 ListIterator.注意这个列表迭代器只有List集合具备。 ListIterator具备在迭代过程中对元素进行增删改查的动作。 */ public class ListIteratorDemo { public static void main(String[] args) { List<String> list = new ArrayList<String>(); list.add("abc1"); list.add("abc2"); list.add("abc3"); Iterator<String> it = list.iterator(); ListIterator<String> liIterator = list.listIterator(); /* while(it.hasNext()) { String str = (String)it.next(); System.out.println(str); if(str.equals("abc2")) list.add("abcxxx");//这里使用了迭代器和集合本身同时操作元素的错误,会报异常:ConcurrentModificationException }*/ while(liIterator.hasNext()) { String str = (String)liIterator.next(); System.out.println("取值:"+str); if(str.equals("abc2")){ liIterator.set("xxx"); }else if(str.equals("abc3")){ liIterator.add("yyy"); }else if(str.equals("abc1")){ liIterator.remove(); } } System.out.println("修改后的值:"+list);//[xxx, abc3, yyy] while(liIterator.hasPrevious())//从下往上取值 { System.out.println("修改后的从下往上取值:"+liIterator.previous()); } } }
ListIteratorDemo类中main方法执行后输出的值为:
取值:abc1
取值:abc2
取值:abc3
修改后的值:[xxx, abc3, yyy]
修改后的从下往上取值:yyy
修改后的从下往上取值:abc3
修改后的从下往上取值:xxx
相关推荐
java中Iterator迭代器讲解,基础数据对象。
该文档是演示迭代器Iterator的使用方法和源代码,其中包括了Iterator的继承类的讲解和再Iterator中的两种方法
java Iterator迭代器的使用 java Iterator迭代器的使用 java Iterator迭代器的使用
C#面向对象设计模式 (行为型模式) Iterator 迭代器模式 视频讲座下载
vector容器与iterator迭代器,有两者的区别和联系,供大家学习理解
Iterator 迭代器
这个是利用iterator迭代器来对hashMap进行迭代元素,数据java基础的内容。有兴趣的朋友可以看看。
仿std&&list;的iterator迭代器,有助于加深对stl中各种封装类的理解
面向对象方法(STL_analysis)of_Iterator迭代器,这个文档对这进行了详细介绍,供参考!
C#面向对象设计模式纵横谈(18):(行为型模式) Iterator 迭代器模式 (Level 300)
主要介绍了Java使用Iterator迭代器遍历集合数据的方法,结合实例形式分析了java迭代器进行集合数据遍历的常见操作技巧,需要的朋友可以参考下
计算机后端-Java-Java核心基础-第24章 集合01 11. Iterator迭代器remove()的使用.avi
在这里与各位分享本人从网络上下载的C#面向对象设计模式纵横谈系列视频,共有25节,除了第一节需要各位贡献一点资源分以作为对本人上传资源的回馈,后面的其他资源均不... 这是第18节:行为型模式Iterator迭代器模式
所谓concept,是一组“描述某个型别”的条件。当某个型别满足所有这样的条件,我们便说它是该concept的一个model。举例来说,char* 便是Input Iterator的model。
iterator迭代器 scala针对每一类集合都提供了一个迭代器(iterator)用来迭代访问集合 使用迭代器遍历集合 使用iterator方法可以从集合获取一个迭代器 迭代器的两个基本操作 hasNext——查询容器中是否有下一个元素 ...
用java编写的迭代器,实现10数字正反向遍历。
迭代器与枚举有两点不同:1. 迭代器允许调用者利用定义良好的语义在迭代期间,从迭代器所指向的 collection 移除元素2. 优化方法名其接口定义如下:Ob