介绍
Iterable 是 Collections - 集合 的父类, 也是所有集合相关的数据结构的基础接口, 我在自己的项目中发现有大约 6000 多个三方包都实现了这个接口, 其中不乏有 Netty, Gurva 这类知名的第三方包, 因此读懂这个类对于理解 Java 的集合是非常有必要的
接口方法
| 方法名 | 简介 |
|---|---|
iterator() | 返回一个 iterator 对象, 其中包含的元素为 T 这个泛型类 |
forEach() | default 方法, 遍历对象中的每个元素 |
spliterator() | default 方法, 返回一个该迭代器的 Spliterators 对象 |
iterator()
Iterator<T> iterator();
这个接口方法定义了所有实现类必须要实现的一个方法, 该方法要求返回一个迭代器对象. 可以用于顺序遍历该集合中的所有对象
使用方式
ArrayList<String> list = new ArrayList<>();
list.add("One");
list.add("Two");
list.add("Three");
// 获取迭代器
Iterator<String> iterator = list.iterator();
forEach()
Java 8 新增
源码
default void forEach(Consumer<? super T> action) {
Objects.requireNonNull(action);
for (T t : this) {
action.accept(t);
}
}
接受一个在JAVA8中新增的java.util.function.Consumer的消费行为 或者称之为动作 (Consumer action )类型, 然后对每个元素执行消费行为直到出现异常或者执行完毕
Consumer 类 接口类, 通过方法
accept()来执行一个动作
使用方式
ArrayList<String> people = new ArrayList<>();
people.add("张三");
people.add("张三");
people.foreach(p -> System.print.out(p));
一般来说, 我们在使用 foreach 处理元素时, 会使用 Lambda 表达式创建一个匿名函数来对该集合内部的所有元素进行操作, 使代码更加简洁
spliterator()
Java 8 新增
default Spliterator<T> spliterator() {
return Spliterators.spliteratorUnknownSize(iterator(), 0);
}
该方法主要返回一个 Spliterators (splitable iterator, 可分割迭代器) , 用来遍历和分割序列, 主要用于并行流 (parallelStream) 的遍历, 其中包含可以将集合分割的方法, 用于多个线程同时进行访问操作