我是靠谱客的博主 超级小鸽子,最近开发中收集的这篇文章主要介绍java for iterator_Java中的Iterable与Iterator详解,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Java中的Iterable与Iterator详解

一、java集合的遍历方式

针对集合的遍历,有很多种方式,下面主要演示List集合的遍历方式。

List list = new ArrayList<>();

list.add("A");

list.add("B");

list.add("C");

1,传统的for循环

for (int i = 0; i < list.size(); i++) {

System.out.println(list.get(i));

}

2,提升效率的传统的for循环

for (int i = 0, size = list.size(); i < size; i++) {

System.out.println(list.get(i));

}

3,增强for循环

for (String s : list) {

System.out.println(s);

}

4,java8 的forEach循环

list.forEach(System.out::println);

5,迭代器循环

Iterator iterator = list.iterator();

while (iterator.hasNext()) {

System.out.println(iterator.next());

}

二、迭代器循环详解

我们知道集合接口实现了 Iterable 接口

public interface Collection extends Iterable {}

其中Iterable接口的代码如下(去除了默认的方法):

public interface Iterable {

Iterator iterator();

}

这里有一个 iterator方法,返回一个Iterator接口:

public interface Iterator {

boolean hasNext();

E next();

}

该接口有两个方法,判断下一个对象是否存在,其次读取该对象。

Iterable接口:从继承结构中可以看出,Iterable接口是Collection的顶层接口,所以Iterable是数据结构,用来存放数据的地方。所有实现了该接口的类表明该类是可以被遍历的。Iterable是可以迭代的一系列元素的表示。它没有任何迭代状态,例如“当前元素”。相反,它有一个生成迭代器的方法。

Iterator接口:是定义了迭代逻辑的接口,即:用于遍历Collection(集合类)中数据的标准访问方法。迭代器是具有迭代状态的对象。它允许你使用hasNext检查它是否有更多元素,并使用next移动到下一个元素(如果有)。

为什么一定要实现Iterable接口,为什么不直接实现Iterator接口呢?

有一个问题,为什么不直接将hasNext(),next()方法放在Iterable接口中,其他类直接实现就可以了?

因为Iterator接口的核心方法next()或者hasNext()是依赖于迭代器的当前迭代位置的。如果Collection直接实现Iterator接口,势必导致集合对象中包含当前迭代位置的数据(指针)。当集合在不同方法间被传递时,由于当前迭代位置不可预置,那么next()方法的结果会变成不可预知。除非再为Iterator接口添加一个reset()方法,用来重置当前迭代位置。但即时这样,Collection也只能同时存在一个当前迭代位置。而Iterable则不然,每次调用都会返回一个从头开始计数的迭代器。多个迭代器是互不干扰的。

有些集合类可能不止一种遍历方式,实现了Iterable的类可以再实现多个Iterator内部类,例如LinkedList中的ListItr和DescendingIterator两个内部类,就分别实现了双向遍历和逆序遍历。通过返回不同的Iterator实现不同的遍历方式,这样更加灵活。如果把两个接口合并,就没法返回不同的Iterator实现类了。这说明如果某个接口的方法在同一个实现类中可能有多种实现的话,使用这种方式则十分符合。使用时需要创建内部类的方式。

最后

以上就是超级小鸽子为你收集整理的java for iterator_Java中的Iterable与Iterator详解的全部内容,希望文章能够帮你解决java for iterator_Java中的Iterable与Iterator详解所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部