什么是迭代器?
Java中提供了很多集合类,这些集合类的数据结构不一样,因此在存储和遍历时的方式不一样。迭代器抽象出集合类的共有功能,提取判断功能和获取功能,得到接口,这个接口就是迭代器接口。在具体子类中实现迭代器接口中的若干方法(使用内部类实现这若干个方法)
- 在Java中,有很多的数据容器,对于这些的操作有很多的
共性
。Java采用了迭代器来为各种容器提供了公共的操作接口。这样使得对容器的遍历操作
与其具体的底层实现
相隔离
,达到解耦的效果 Iterator
对象称为迭代器,主要用于遍历Collection集合中的元素- 所有实现了Collection接口的集合类都有一个
iterator()
方法,用以返回一个实现了Iterator
接口对象,即可返回一个迭代器 Iterator
仅用于遍历集合,Iterator
本身不存放对象
Collection接口
Collection接口api:public interface Collection<E> extends Iterable<E>
,该接口有一个父接口Iterable
,该接口中有一个方法:public interface Iterable<T>
,实现这个接口允许对象称为foreach
语句的目标。
方法
iterable |
返回一个在一组T类型的元素上进行迭代的迭代器 |
---|---|
接口中的这个方法返回类型是Iterator类型的接口。继续查看Iterator接口。有三个方法
在Iterator接口中定义了三个方法
HasNext() |
如果仍有元素可以迭代,则返回ture |
---|---|
next() |
返回迭代的下一个元素 |
remove() |
从迭代器指向的Collection 中移除迭代器返回的最后一个元素(可选操作) |
迭代器使用
- 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素:iterator()方法是java.lang.Iterable接口,被Collection继承
- 使用
next()
:获得序列中的下一个元素 - 使用
hasNext()
:检查序列中是否还有元素 - 使用
remove()
:将迭代器新返回的元素删除
代码演示
import java.util.ArrayList;
import java.util.Iterator;
public class IteratorTest {
public static void main(String[] args) {
ArrayList list = new ArrayList();//右边是ArrayList的实例,即运行时是ArrayList的实例,因此最终返回的就是ArrayList类中的内部类Itr的实例对象。
list.add(100);
list.add(200);
list.add(300);
Iterator it = list.iterator();//左边是接口,右边是具体类实例对象
while (it.hasNext()) {
Object next = it.next();
System.out.println(next);// 100 200 300
}
}
}
总结:Iterator可以不用管底层数据具体是怎样存储的,都能够通过next()遍历整个List
AbstractList实现Iterator的源代码