Iterable和Iterator的关系
Iterator和Iterable
学习任何类和文档最标准的解释当然还是从jdk API里面学习,因为这个是最准确不过的东西了。想看API文档
Iterable
java.lang包中 并且Collection继承了Iterable接口。
在Iterable中有三个方法
Iterator iterator;
该方法主要是返回T类型的元素上的一个迭代器
dafault void forEach(Consumer<? super T> action);
该方法是循环输出,对内部元素进行遍历,并对元素进行指定的操作
default Spliterator spliterator;
该方法提供了一个可以并行遍历元素的迭代器,以适应现在cpu多核时代并行遍历的需求。
Iterable
java.util包中
在Iterator中有四个方法
dafault void forEachRemaining(Consumer<? super E> action);
JDK 1.8后新增默认方法 使用Lambda表达式来遍历集合元素
boolean hasNext()
如果被迭代遍历的集合还没有被遍历完,返回True
Object next()
返回集合里面的下一个元素
remove()
删除集合里面上一次next()方法返回的元素。
文档咱们看完了。估计新手还是对这两个接口有所疑问。我简单的总结一下,也是个人理解。对于Iterable接口来说,是一个操作迭代器的接口。而对于Iterator接口来说,则是将集合转化为迭代器,用迭代器的方式来操作里面的数据元素。所以集合继承是的Iterable接口,实现集合变成迭代器。下面举一个????来证明一下我的观点。
public class TestList{
//new 一个集合出来,用迭代器进行迭代。
List<String> list = new ArrayList<>();
for(int i =0; i<10; i++){
list.add("123");
}
//用迭代器的方式进行遍历。
Iterator it = list.iterator();//首先是变成迭代器,重点是要对立面的元素进行操作
while(it.hasNext()){
System.out.println(it.next());
}
}
嗯,这么就能看出来,iterator是对数据元素进行操作的。所以大家要是在实现迭代器上面要直接实现iterable接口,直接返回一个迭代器就可以了。