迭代器iterator
next()
迭代器对象使用next方法底层是返回当前下标的元素。每调用一次next,计数器加1,从而遍历每个元素。
假如集合存放了三个元素
调用第一次next返回的就是集合中第一个元素(下标为0)
调用第二次next返回的就是集合中第二个元素(下标为1)
当调用到第四次时,下标就越界,于是就报错。
因此我们一般配合hasNext方法去判断是否仍有元素可迭代。像这样:
public static void main(String[] args) {
Collection<String> list = new ArrayList<>();
list.add("xx0");
list.add("xx1");
list.add("xx2");
list.add("xx3");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}
手写迭代器
MyIterator
public class MyIterator {
List list;
public MyIterator(List list){
this.list = list;
}
private int count = 0;
Object next(){
if (count>=list.size()){
throw new MyIteratorException("下标越界");
}
return list.get(count++);
}
Boolean hasNext(){
if (list==null){
return false;
}
return count!=list.size();
}
}
以上简单的实现了迭代器常用的功能方法,事实上Iterator是一个接口,我们这里写的迭代器是可以通过构造器实例化的,但是其设计与源码接近。
MyIteratorException
public class MyIteratorException extends RuntimeException{
public MyIteratorException(String errorMsg) {
super(errorMsg);
}
}
测试的类
public class Test01 {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("xx0");
list.add("xx1");
list.add("xx2");
list.add("xx3");
MyIterator iterator = new MyIterator(list);
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}
}
源码解析请参考: link