这篇博文将在前两篇博文的基础上继续深入学习Java数据结构中的集合部分知识点。这篇博文学习的重点是Java中的Iterable接口。
一、 Java中的Iterable接口特点:
1、接口Iterable的API文档描述。
Java8的API中的Iterable接口的描述如下:
图1:
从接口的描述可以清晰的了解到,这个接口基本是一个顶层的接口,在其下有很多继承了Iterable接口的子接口和数不尽的接口实现类。可想而知这个接口在Java中占 据着举足轻重的地位。
从API文档中的描述是这样的:"Implementing this interface allows an object to be the target of the "for-each loop" statement."大概意思就是实
现了这个接口之后就可以对目标对象执行新的for循环(forEach)遍历操作了。
2、 接口Iterable的内部结构:
文档中主要有三个方法。
1)、接口中的Iterator<T> iterator();方法用来返回一个Iterator类型的对象,或者说用来返回一个实现了Iterator接口的对象;
2)、实现了Iterator接口的类可以拥有增强型的For循环,即只要实现了Iterator接口的类,就可以使用Iterator迭代器了。
3)、 也可以这么理解:一个集合对象要表明自己支持迭代,能够拥有使用foreach语句的特权,就必须实现Iterable接口,就必 须为foreach语句提供一个迭代器。这个迭代器是用接口定义的iterator方法提供的。也就是iterator方法需要返回的一个 iterator对象。
4)、Java SE5引入了Iterable接口,该接口包含一个能够产生Iterator的iterator()方法,并且Iterable接口被foreach用来在序列 中移动。因此你创建了任何实现Iterable的自定义类,都可以将它用于foreach语句中。Iterable的主要作用为:实现Iterable 接口来实现适用于foreach遍历的自定义类。
3、Iterator接口中的除Iterator方法外的其他方法理解:
4、知识点扩展:
二、Java中的Iterable接口的使用:
假如你想让你的类对象在使用的过程中支持集合foreach迭代,那么你最好实现接口Iterable接口。
三Java中有两个接口名字特别相似(Iterable和Iterator):
这部分用于阐述Java中的Iterator和Iterable的区别和联系。Iterable的特点和使用方法上面的篇幅已经阐述的差不多了。接下来的篇幅用于阐述Iterator和而这之间的差 异和联系。
1、Iterator接口的描述:
这两个接口分别位于不同的包下Iterator位于包java.util.Iterator下,Iterable位于包java.lang.Iterable 。
1).Iterator是迭代器类,而Iterable是为了只要实现该接口就可以使用foreach,进行迭代.
2).Iterable中封装了Iterator接口,只要实现了Iterable接口的类,就可以使用Iterator迭代器了。
3).集合Collection、List、Set都是Iterable的实现类,所以他们及其他们的子类都可以使用foreach进行迭代。
4).Iterator中核心的方法next(),hasnext(),remove(),都是依赖当前位置,如果这些集合直接实现Iterator,则必须包括当前迭代位置的指针。当集合在方法间进行传
递的时候,由于当前位置不可知,所以next()之后的值,也不可知。而当实现Iterable则不然,每次调用都返回一个从头开始的迭代器,各个迭代器之间互不影响。