- Iterator 隐藏集合类的底层实现,通过hasNext和next方法得到集合当中的对象
- iterator() 返回Iterator对象
- hasNext() 判断当前集合是否含有下一个可迭代的元素
- next() 返回当前集合下一个可迭代元素
class MyIterator<E> implements Iterable{
private E[] elements;//存放元素的容器
private int size; //存放元素的个数
public MyIterator(E[] elements){
this.elements = elements;
this.size = elements.length;
}
@Override
public Iterator iterator() {
return new Iterator() {
@Override
public boolean hasNext() {
return false;
}
@Override
public Object next() {
return null;
}
};
}
}
public class TestDemo2 {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<>();
for(Integer i: list){
System.out.println(i);
}
//迭代器的使用
Iterator<Integer> itr = list.iterator();
while(itr.hasNext()){
System.out.println(itr.next());
}
}
}
自定义迭代器的实现
ArrayList中对迭代器的实现
- 1)modCount 定义于AbstractList,存储结构修改次数
- 2)fast-fail机制
- ConcurrentModificationException 使用迭代器遍历时,如果调用集合add/remove
- 方法修改集合的结构,则会抛出ConcurrentModificationException
class MyIterator<E> implements Iterable{
private E[] elements;//存放元素的容器
private int size; //存放元素的个数
public MyIterator(E[] elements){
this.elements = elements;
this.size = elements.length;
}
@Override
public Iterator iterator() {
return new Iterator() {
private int cursor = -1;
@Override
public boolean hasNext() {
return (cursor+1) < size;
}
@Override
public Object next() {
return elements[++cursor];
}
};
}
}