Iterable 接口
Iterable 意为可迭代的、可重复的,实现 Iterable 接口的集合对象支持迭代,是可迭代。
从源代码中可以看到,Collection 接口继承了 Iterable 接口。
在 Iterable 接口中定义了三个方法:
(1)该方法返回一个 T 类型元素上的迭代器。
(2)该方法进行循环输出,对内部元素进行遍历,传递的参数是一个Consumer接口。
(3)该方法提供了一个可以并行遍历元素的迭代器,以适应现在cpu多核时代并行遍历的需求。
Iterator 接口
iterator 是迭代器,其中定义了四个方法:
(1)该方法返回一个 boolean 类型的值,来判断集合是否遍历完成,如果集合没有遍历完,返回true。
(2)返回集合中的下一个元素。
(3)删除集合中上一次 next() 返回的元素。
(4)参数传递一个Consumer接口对象,来遍历集合中的元素。该方法时JDK1.8之后新增的默认方法。
思考:Collection 接口没有直接继承 Iterator接口,而是继承了 Iterable接口,调用其中的Iterator() 返回一个类型的迭代器,进行遍历。这种做法的原因是,Iterator接口中的 hasnext() 和 next() 方法,需要在集合中保留一个标识当前位置的数据,如果集合在不同的方法中使用,对于不同的方法来说,当前位置变得不可预知,并且在Collection集合中也只能保留一个当前位置信息。但是继承了Iterable接口之后,每次调用都会产生一个新的当前位置信息,使得多个迭代器对同一个Collection集合的操作互不干扰。