您的位置:首页 > 其它

Iterator(迭代器)遍历Collection集合

2021-09-16 11:53 323 查看

1.Iterator概述

Iterator(迭代器)是一个接口,它的作用就是遍历容器的所有元素,也是 Java 集合框架的成员,但它与 Collection 和 Map 系列的集合不一样,Collection 和 Map 系列集合主要用于盛装其他对象,而 Iterator 则主要用于遍历(即迭代访问)Collection 集合中的元素。

实例用法:

Collection objs = new HashSet();
Iterator it = objs.iterator();

Iterator 接口隐藏了各种 Collection 实现类的底层细节,向应用程序提供了遍历 Collection 集合元素的统一编程接口。Iterator 接口里定义了如下 4 个方法。

  1. boolean hasNext():如果被迭代的集合元素还没有被遍历完,则返回 true。
  2. Object next():返回集合里的下一个元素。
  3. void remove():删除集合里上一次 next 方法返回的元素。
  4. void forEachRemaining(Consumer action):这是 Java 8 为 Iterator 新增的默认方法,该方法可使用 Lambda 表达式来遍历集合元素。

注:Iterator 必须依附于 Collection 对象,若有一个 Iterator 对象,则必然有一个与之关联的 Collection 对象。Iterator 提供了两个方法来迭代访问 Collection 集合里的元素(next与forEachRemaining),并可通过 remove() 方法来删除集合中上一次 next() 方法返回的集合元素。(Iterator只能通过remove方法移除最近获得的next集合对象,除此之外不可改变集合中的对象)

Iterator 迭代器采用的是**快速失败(fail-fast)**机制,一旦在迭代过程中检测到该集合已经被修改(通常是程序中的其他线程修改),程序立即引发 ConcurrentModificationException 异常,而不是显示修改后的结果,这样可以避免共享资源而引发的潜在问题。

2.普通遍历

Iterator its = set.iterator();
while(its.hasNext()){
Integer i = (Integer) its.next //Iterator未定义泛型,默认返回Object。需向下转型。
if(i.equals(33)){
its.remove();
}else{
System.out.println(i);
}
}

3.Lambda表达式遍历迭代器

Java 8 为 Iterator 引入了一个

forEachRemaining(Consumer action)
默认方法,该方法所需的 Consumer 参数同样也是函数式接口。当程序调用 Iterator 的 forEachRemaining(Consumer action) 遍历集合元素时,程序会依次将集合元素传给 Consumer 的 accept(T t) 方法(该接口中唯一的抽象方法)。

java.util.function 中的 Function、Supplier、Consumer、Predicate 和其他函数式接口被广泛用在支持 Lambda 表达式的 API 中。“void accept(T t);”是 Consumer 的核心方法,用来对给定的参数 T 执行定义操作。

实例:

Set<Integer> set = new HashSet<>();
Iterator itt = set.iterator();
itt.forEachRemaining(
num -> {
Integer i = (Integer) num;
if(i.compareTo(33) > 0) System.out.println("BigNumber " + num);
else System.out.println("SmallNumber " + num);
}
);

保留问题

函数式接口的底层实现 接口中方法的调用

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐