iterator是什么
先去Java源代码看一下,iterator是一个接口,可以用来遍历任何实现了Collection的容器。
public interface Iterator<E> {
boolean hasNext();
E next();
void remove();
}
iterator怎么使用
Iterator可以从「List」「Set」获得
List list = new ArrayList<>();
Set set = new HashSet();
Iterator listIterator = list.iterator();
Iterator setIterator = set.iterator();
原因是它们两个都实现了Collection的接口,从定义看
public interface List<E> extends Collection<E> {
...
}
public interface Set<E> extends Collection<E> {
...
}
然后根据接口函数
//是否还有下一个
boolean hasNext();
//下一个
E next();
//删除
void remove();
就可以操作这个迭代器
while (iterator.hasNext()) {
Object object = iterator.next();
....
}
关于最后一个的判断
但是第一次看到的时候我是蒙逼的(°_°),桥多麻袋~为什么只有「next」,最后一个再取next不就越界了么?怎么判断当前是最后一个呢。。。仔细看了源代码后发现
/**
* Returns the next element in the iteration.
*/
E next();
这里使用了模板,next的函数的返回值是一个Object,取决于你容器里存的是什么,最关键的一个问题却又没有说(可能Java大神认为大家都知道了)
- 每次执行next()函数会返回内部一个对象
- 然后iterator本身会偏移「一个地址」
这也就是为什么iterator使用while循环进行遍历,而不是使用for循环
所以说
- 到了倒数第二个Object
- 执行iterator.hasNext()为true
- 执行next()
- 返回倒数第二个Object,iterator偏移到最后一个Object
- 执行iterator.hasNext()为false
所以说可以通过hasNext()判断是不是最后一个。