Iterator 的中文意思是迭代器.
单单从中文翻译也不易理解迭代器的意思啊, 其实Iterator是1个接口, 它的作用就是遍历容器的所有元素.
一, Iterator 接口简介
Iterator 是为了实现对java容器(collection)进行遍历功能的1个接口.
我们定义iterator (首字母小色) 是实现了Iterator 接口的1个对象.

首先iterator
实现了Iterator接口后, 相当于把1个Collection容器的所有对象, 做成1个线性表(List) . 而iterator本身于1个指针.
这个指针一开始是位于 第1个元素之前的. 如下图
下面介绍2个Iterator接口内最主要的三个方法.
1.1 boolean hasNext();
判断iterator 内是否存在下1个元素, 如果存在返回true, 否则返回false.
注意, 这时上面的那个指针位置不变.
1.2 Object next();
返回iterator 内下1个元素, 同时上面的指针向后移动一位.
如下图:

可见, 如果不断地循环执行next()方法, 就可以遍历容器内所有的元素了.
1.3 void remove();
删除iterator 内指针的前1个元素, 前提是至少执行过1次next();
这个方法不建议使用, 建议使用容器本身的romove方法.
二, Iterator 接口的意义
我们知道, 遍历1个ArrayList 和 Linklist 是十分容易的.
遍历1个Tree容器也不难, 但是实现机制是完全不同.
而遍历1个Set容器就无从下手了.
所以Java 设计了Iterator这个接口, 分别让各种容器自己去重写里面的hasNext() 和 next()方法.
所以我们不用关心各种容器的遍历机制, 只要使用Iterator , 会让人觉得各种容器的遍历方法都是一样的, 这也是java接口的重要意义.
三, 如何使用 Iterator
但是在java的各种容器内, 例如ArrayList, HashSet等, 并没有直接实现Iterator这个接口.
所以ArrayList, HashSet容器内是没有 hasNext(), next()的方法的.
而是具有 iterator() 这个方法, 返回1个实现了Iterator
接口的 iterator 对象.
注意区别啊.
下面是1个简单例子, 遍历1个HashSet
import java.util.HashSet;
import java.util.Iterator;
class Student{
private int id;
private String name;
public Student(int id, String name){
this.id = id;
this.name = name;
}
//overwrite
public String toString(){
return this.id + ":" + this.name;
}
//overwrite hashCode()
public int hashCode(){
return id * name.hashCode();
}
//overwrite equals()
public boolean equals(Object o){
Student s = (Student)o;
return (s.id == this.id) && (s.name.equals(this.name));
}
}
public class Iterator1{
public static void f(){
HashSet hs = new HashSet();
hs.add(new Student(1,"Jack"));
hs.add(new Student(2,"Bill"));
hs.add(new Student(3,"Alice"));
hs.add(new Student(4,"Cici"));
Student st;
Iterator it = hs.iterator(); //Poly
while (it.hasNext()){
st = (Student)(it.next());
System.out.println(st);
}
}
}
输出:
[java] 2:Bill
[java] 1:Jack
[java] 4:Cici
[java] 3:Alice