iterator和iterable

迭代器(iterator)是一种对象,它能够用来遍历标准模板库容器中的部分或全部元素,每个迭代器对象代表容器中的确定的地址。迭代器修改了常规指针的接口,所谓迭代器是一种概念上的抽象:那些行为上像迭代器的东西都可以叫做迭代器。然而迭代器有很多不同的能力,它可以把抽象容器和通用算法有机的统一起来。
Iterator是java.util包下的接口:

1
2
3
4
5
6
package java.util;
public interface Iterator{
boolean hasNext();
Object next();
void remove();
}

Iterable是java.lang下的接口:

1
2
3
4
5
package java.lang;
import java.util.Iterator;
public interface Iterable{
Iterator iterator();
}

  1. 在jdk 1.5以后,引入了Iterable,使用foreach语句(增强型for循环)必须使用Iterable类。
  2. Collection继承于Iterable而不是Iterator接口。
    Iterable的子类是Collection,Collection的子类是List,Set,这些是数据结构的类,用于存放数据。
    Iterator是定义迭代逻辑的类,让迭代逻辑和数据结构分离开来,这样的好处是可以在一种数据结构上实现多种迭代逻辑
  3. 每一次调用Iterable的Iterator()方法,都会返回一个从头开始的Iterator对象,各个Iterator对象之间不会相互干扰,保证了(多线程)可以同时对一个数据结构进行多个遍历。