创建集合增加元素,使用迭代器遍历并打印集合,如下所示:
Collection<String> c = new ArrayList<>();
c.add("aa");
c.add("bb");
c.add("cc");
//获取迭代器对象
Iterator<String> iterator = c.iterator();
while(iterator.hasNext()) {
String strs = iterator.next();
System.out.print(strs+" ");
}
输出结果为:aa bb cc
原理:1.调用iterator方法,实现类会覆盖重写该方法,不同的实现类覆盖重写的是不一样的。
2.调用iterator方法,返回的是Iterator接口的具体的实现类
例如:
1.ArrayList的iterator方法返回的迭代器对象是:new Itr()
底层原码:
Itr()是Iterator接口的实现类
2.LinkedList的iterator方法返回的迭代器对象是:new ListItr()
ListItr implements ListIterator
ListIterator extends Iterator
3.HashSet的iterator方法返回的迭代器对象是:new KeyIterator()
KeyIterator implements Iterator
不同的实现类返回的迭代器是不同的。
以ArrayList这个实现类返回的迭代器对象的实现原理:
public class ArrayList<>{
private int size;//记录集合中保存的元素的个数
private Object[] elementDate;//这个数组中保存我们存入的元素
//Itr这个类是一个成员内部类
private class Itr<E> implements Iterator<E>{
int cursor; //默认值是0
E next(){
return (E)elementData[cursor++];//elementData是外部类的成员变量
}
boolean hahNext(){
return cursor != size;//size是外部类的成员变量
}
//成员内部类的方法中可以直接使用外部类的成员变量。
}
}