简述Iterable与Iterator接口

一、概述

1.1 Iterator接口

Iterator接口定义了集合和流操作等的遍历方法。封装了一系列迭代器的方法,因此,Itreator的对象也被称为“迭代器”。
常用的API如下:
在这里插入图片描述

1.2 Iterable接口

Iterable接口是一个可迭代的接口,其中提供了获取Iterator迭代器的方法和获取Spliterator可分割迭代器的方法。
获取Iterator的方法用以支持集合的遍历;获取Spliterator的方法用以支持集合的并发遍历。
其次,对于实现Iterator的类还提供了forEach遍历方法。
常用的API如下:
在这里插入图片描述

二、简单的应用

一般来说,集合的遍历有三种方式,如下所示:

List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
//for循环遍历
for(int i = 0;i < list.size();i++){
	System.out.print(list.get(i)+",");
}
//迭代器遍历
Iterator iterator = list.iterator();
while(iterator.hasNext()){
	System.out.print(iterator.next()+",");
}
//forEach循环
for(Integer i:list){
	System.out.print(i+",");
}

第一种是普通的for循环,后面两种是Iterator迭代器和forEach循环。

三、区别与联系

3.1 为什么要实现Iterable接口,而不是直接实现Iterator接口?

因为Iterator接口中的核心方法,next()或hasNext()均依赖于迭代器当前的位置,即依靠迭代器的指针,因此,若Collection集合直接继承Iterator接口,不同的方法调用集合遍历时,就共用了一个迭代器,由于迭代器的指针无法重置,就会导致返回无法预测的值,其次,即使迭代器能重置指针位置,也仅能同时存在一个迭代器,无法满足集合中多种遍历方式的需求。
所以,实现Iterable接口,能在每次调用的时候都返回一个从头开始计数的迭代器,允许多个迭代器同时存在且彼此互不干扰工作。

3.2 为什么不把hasNext()和next()方法放在Iterable接口中?

原因和上面一样,主要还是指针和多个Iterator迭代器的问题。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值