Java Iterable接口 Java源码解析之Iterable接口
不会编程的派大星 人气:0想了解Java源码解析之Iterable接口的相关内容吗,不会编程的派大星在本文为您仔细讲解Java Iterable接口的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:Java,Iterable接口,java接口,下面大家一起来学习吧。
这里我们给定一个集合strings
一、写法1–循环
for (int i = 0, len = strings.size(); i < len; i++) { System.out.println(strings.get(i)); }
二、写法2–foreach循环
for (String var : strings) { System.out.println(var); }
三、写法3–Iterator
Iterator iterator = strings.iterator(); while (iterator.hasNext()) { System.out.println(iterator.next()); }
对于以上三种遍历方式,相信大家都很熟悉了吧。for循环可以理解为就是通过下标来获取元素,这个特点就和数组很相似。foreach主要对类似链表的解耦提供遍历支持,链表没有下标,如果使用foreach循环的话会大大降低性能。Iterator就是我们今天 要讲述的主角,它实际上就是foreach。
那既然Java为集合提供了这么几种遍历方式,那如果是普通对象或者是任何对象,那又该怎么遍历呢?
四、Iterable
Iterable是迭代器的意思,作用是为集合类提供for-each循环的支持。由于使用for循环需要通过位置获取元素,而这种获取方式仅有数组支持,其他许多数据结构,比如链表,只能通过查询获取数据,这会大大的降低效率。Iterable就可以让不同的集合类自己提供遍历的最佳方式。
我们来看看Iterable文档声明,其中有一句话是这么说的:
Implementing this interface allows an object to be the target of the "for-each loop" statement.
它的作用就是为Java对象提供foreach循环,其主要方法是返回一个Iterator对象:
Iterator<T> iterator();
意思就是,如果想让任意一个Java对象支持foreach,只要实现iterable接口,然后就可以通过Iterator iterator = strings.iterator()
的方式,想集合那样遍历了。
五、Iterator
Iterator是foreach遍历的主体,我们来看看它是怎么实现的呢?
// 判断一个对象集合是否还有下一个元素 boolean hasNext(); // 获取下一个元素 E next(); // 删除最后一个元素。默认是不支持的,因为在很多情况下其结果不可预测,比如数据集合在此时被修改 default void remove(){...} // 主要将每个元素作为参数发给action来执行特定操作 default void forEachRemaining(Consumer<? super E> action){...}
除此之外,Iterator还有一个子接口,施伟需要双向遍历数据时准备的,来看看它增加了那些方法吧
// 是否有前一个元素 boolean hasPrevious(); // 获取前一个元素 E previous(); // 获取下一个元素的位置 int nextIndex(); // 获取前一个元素的位置 int previousIndex(); // 添加一个元素 void add(E e); // 替换当前元素值 void set(E e);
六、总结
在Java中有许多特性都是通过接口来实现的,foreach循环也是。foreach主要是解决for循环依赖下标的问题,为高效遍历更多的数据结提供了支持。
加载全部内容