Iterator 接口主要用于遍历Collection集合中的元素,Iterator对象也被称为迭代器。
Iterator接口隐藏了各种Collection实现类的底层细节,向应用程序提供了遍历Collection集合元素的统一接口。

Iterator接口中定义了4个方法。
boolean hasNext(): 判断是否有下一个可访问的元素,如果有返回true,否则返回false。
Object next(): 返回集合中的下一个元素
void remove(): 删除集合里上一次next方法返回的元素。
void forEachRemaining(Consumer action), 这是java8为Iterator 新增的默认方法,该方法可以使用Lambda表达式来遍历集合元素。

public class ArrayListDemo {public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();list.add("山东");list.add("山西");list.add("湖南");list.add("湖北");/*** 接下来介绍三种遍历方式* 1、foreach循环* 2、while配合Iterator* 3、Iterator下的Lambda表达式*/System.out.println("使用forEach循环遍历集合中元素");for(String e : list){System.out.println(e);}System.out.println("----------------");System.out.println("使用Iterator配合while遍历");Iterator<String> iterator = list.iterator();while(iterator.hasNext()){System.out.println(iterator.next());}System.out.println("----------------");System.out.println("使用Iterator的Lambda表达式遍历集合");/*** 需要注意的是,这儿需要再次定义一个Iterator的对象,为什么要这么做,这是因为,iterator相当于数据库中的游标,* 且只能单向移动,也就是说上面配合while循环遍历的iterator已经走到了这个集合的尾部,已经没有元素了。所以如果再使用* 上面的iterator是遍历不出什么东西的。*/Iterator<String> iterator1 = list.iterator();iterator1.forEachRemaining(e-> System.out.println(e));}
}

运行截图:

Iterator仅用于遍历集合,本身并没有盛装对象的能力。如果需要创建Iterator对象,则必须有一个被迭代的集合。

然而使用Lambda表达式遍历Iterator显得更方便一些。

iterator.forEachRemaining(e -> System.out.println("迭代集合元素是:"+e));

void forEachRemaining(Consumer action) 方法,参数使用的是函数式接口。当程序调用Iterator的forEachRemaining(Consumer action)遍历集合元素时,程序会依次将集合元素传给Consumer 的accept(T t)方法(该接口中唯一的一个抽象方法)
Iterator迭代器采用的是快速失败机制,一旦在迭代过程中检测到该集合已经被修改,程序就会立即引发ConcurrentModificationException异常。

import java.util.ArrayList;
import java.util.Iterator;public class IteratorDemo {public static void main(String[] args) {ArrayList<String> card = new ArrayList<String>();card.add("蛇发女妖佐拉");card.add("恩佐斯");card.add("克苏恩");card.add("亚煞极");card.add("巫妖王");Iterator<String> iterator = card.iterator();System.out.println("--------------采用Lambda表达式遍历---------------");iterator.forEachRemaining(e -> System.out.println("迭代集合元素是:"+e));System.out.println("--------------删除2号位置的元素---------------");card.remove(2);System.out.println("--------------使用foreach遍历集合元素---------------");for(String e : card){System.out.println(e);}System.out.println("--------------再次使用迭代器访问---------------");//iterator.forEachRemaining(e -> System.out.println("迭代集合元素是:"+e));while (iterator.hasNext()){System.out.println(iterator.next());}}
}

运行截图:

从上图可以看出,修改了集合中的元素后,迭代器就不能用了。但是请注意我注释掉的那一串代码,当运行这一串代码的时候并不会出现异常,而是什么也不输出。总之就是如果集合变了,要么再一次声明迭代器,要么使用foreach循环直接打印输出。

最后对于remove()强调一点,使用Iterator.remove()是可以直接删除集合中的元素的。打个比喻就是,Iterator迭代器和原集合两个人共用一个心脏。但是需要注意的是,在遍历时,迭代变量所获得的是集合元素的值,而不是集合元素本身。

JAVA中的Iterator相关推荐

  1. Java中的Iterator(迭代器)

    Java中的Iterator(迭代器) 1 概述 ​ Java Iterator不是一个集合,是一种用于访问集合的方法,可用于迭代ArrayList和HashSet等集合.Iterator是Java迭 ...

  2. java中遍历collection_使用Java中的Iterator遍历Collection

    Java中的集合提供了一种处理一组对象的体系结构.Java集合框架中的不同类是ArrayList,LinkedList,HashSet,Vector等. 迭代器可用于遍历Collection,使用Ar ...

  3. Java中set.iterator()的用法;

    java.util.Set.iterator() 方法用于返回与集合相同元素的迭代器.元素从集合中的内容以随机顺序返回. 句法 iterate_value = Set.iterator(); 参数:该 ...

  4. java中的Iterator和Iterable 区别

    原文:http://perfy315.iteye.com/blog/1459201 ---------------------------------------------------------- ...

  5. java中next的用法_关于java iterator的next()方法的用法

    UYOU next()是java迭代器类(Iterator)的方法,获得当前游标指向的下一个元素,详细说明和应用如下:1.迭代器(Iterator)介绍 迭代器是一种设计模式,它是一个对象,它可以遍历 ...

  6. Java中的Iterable与Iterator详解

    在Java中,我们可以对List集合进行如下几种方式的遍历: List<Integer> list = new ArrayList<>(); list.add(5); list ...

  7. java it_Java中的Iterator的用法

    Iterator(迭代器) 迭代器是一种设计模式,它是一个对象,可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构.迭代器通常器被称为"轻量级"对象,因为创建它的代价 ...

  8. java中Iterator用法总结

    Java中Iterator用法 迭代器(Iterator) 迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构.迭代器通常被称为"轻量级& ...

  9. Java中Iterator用法

    迭代器(Iterator) 迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构.迭代器通常被称为"轻量级"对象,因为创建它的代价 ...

最新文章

  1. 如何用Python画一朵太阳花
  2. “厌氧动物”出现,科学家不清楚代谢方式,或颠覆对生命的认知
  3. 数据标准化(归一化)
  4. 机器学习过拟合---范数
  5. 常用的比较排序算法总结
  6. python 写xml_使用python 写xml文件
  7. ViewHolder模式超简洁写法
  8. 在VS中手工创建一个最简单的WPF程序
  9. codeforces346e
  10. Firefox 37原生支持HTML5视频回放功能
  11. scapy爬虫-Url去重
  12. 01使用ILDasm.exe将可执行文件反编译成IL代码
  13. 怎么清除DNS缓存?
  14. JavaScript制作网页动画
  15. 信客 lt;文gt; 余秋雨
  16. 企业级负载均衡集群——lvs的DR模式(直接路由模式)详细说明
  17. ESP32C3 开发板 Download Mode 模式
  18. junit in action读书笔记
  19. 一张图读懂PBN旁切转弯计算
  20. matlab学习笔记之——符号函数应该怎么作图?

热门文章

  1. wegame饥荒一直登录中_LOL登录遇到预期之外的错误(用wegame登录出现错误而用客户端登录可以的解决方法)!亲测有效!...
  2. 第三十四章 数论——高斯消元解线性方程组
  3. 原生js实现QQ邮箱邮件拖拽删除功能
  4. Cesium中的各个坐标拾取
  5. Qt刷新UI界面问题
  6. 看不懂Offer上的岗位?这一篇统统给你说明白!
  7. 思杰虚拟服务器退出管理主机,详解Citrix思杰XenServer虚拟化(7)
  8. html整体居中文字,html里文字居中代码怎么写?
  9. 使用Convert命令进行显示转换
  10. 欧拉函数互质数的个数