Java集合源码分析Java集合源码分析

Java集合源码分析之Iterable概述

2018-04-28  本文已影响396人  大大纸飞机

Iterable是迭代器的意思,作用是为集合类提供for-each循环的支持。由于使用for循环需要通过位置获取元素,而这种获取方式仅有数组支持,其他许多数据结构,比如链表,只能通过查询获取数据,这会大大的降低效率。Iterable就可以让不同的集合类自己提供遍历的最佳方式。

Iterable的文档声明仅有一句:

Implementing this interface allows an object to be the target of the "for-each loop" statement.

其主要方法是返回一个Iterator对象。

Iterator<T> iterator();

Iterator对象我们有时也会用到,经常使用的while(it.hasNext())中的hasNext方法就是在这里定义的。Iterator一共有四个方法:

// 判断一个对象集合是否还有下一个元素
boolean hasNext();

// 获取下一个元素
E next();

// 删除最后一个元素。默认是不支持的,因为在很多情况下其结果不可预测,比如数据集合在此时被修改
default void remove(){...}

// 主要将每个元素作为参数发给action来执行特定操作
default void forEachRemaining(Consumer<? super E> action){...}

Iterator还有一个子接口,是为需要双向遍历数据时准备的,我们在ArrayListLinkedList中都会看到它。其主要增加了以下几个方法:

// 是否有前一个元素
boolean hasPrevious();

// 获取前一个元素
E previous();

// 获取下一个元素的位置
int nextIndex();

// 获取前一个元素的位置
int previousIndex();

// 添加一个元素
void add(E e);

// 替换当前元素值
void set(E e);

Iterable的作用是很明显也很强大的,通过hasNext方法,可以减少诸如链表等结构的查询复杂度,forfor-each循环的主要区别也在此。

上一篇下一篇

猜你喜欢

热点阅读