Java数据结构与算法之数据结构-逻辑结构-集合(三)------集合之Iterable接口

这篇博文将在前两篇博文的基础上继续深入学习Java数据结构中的集合部分知识点。这篇博文学习的重点是Java中的Iterable接口。


一、 Java中的Iterable接口特点:

1、接口Iterable的API文档描述。


Java8的API中的Iterable接口的描述如下:

Java数据结构与算法之数据结构-逻辑结构-集合(三)------集合之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的内部结构:

Java数据结构与算法之数据结构-逻辑结构-集合(三)------集合之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方法外的其他方法理解:

1)、 default void forEach(Consumer<? super T> action)方法:

2)、  default Spliterator<T> spliterator()方法:

4、知识点扩展:

Iterable中的有两个方法的默认访问权限为:default,那么这个访问权限是什么意思呢?这个是默认包访问权限的意思,就是在同一 个包中默认具有的访问权限。假如没有访问权限修饰符就默认为friendly访问权限。

二、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则不然,每次调用都返回一个从头开始的迭代器,各个迭代器之间互不影响。