Iterator(迭代器)遍历Collection集合

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Iterator(迭代器)遍历Collection集合
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);
}
}
mbda表达式遍历迭代器
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(pareTo(33) > 0) System.out.println("BigNumber " + num);
else System.out.println("SmallNumber " + num);
}
);
保留问题
函数式接⼝的底层实现
接⼝中⽅法的调⽤。

相关文档
最新文档