Iterator接口用于遍历集合元素,是一个泛型接口。
Iterator接口有4个方法:
- boolean hasNext():如果被迭代的集合还有下一个元素而且不会抛出异常则返回true
- E next():返回集合的下一个元素
- default void remove():删除集合里上一次next方法返回的元素,jdk1.8 集合的默认实现含有方法体,用关键字default
- default void forEachRemaining(Consumer action):1.8新增的默认实现的方法,用于使用lambda表达式来遍历集合元素
需要注意是的是:next方法返回的是E类型的元素,是一个泛型方法。
一般对于实现Iterator接口的集合只需要实现前面的3个方法即可。
fail-fast机制:在多并发场景下,如果有一个线程A通过Iterator遍历访问整个集合过程中,如果另外一个线程B修改了这个集合,则A会抛出ConcurrentModificationException异常,在多并发场景下应该使用线程安全的集合。
关于迭代器游标的问题
hasNext不会使游标向下一个元素移动,即重复使用hasNext方法都是对同一个位置上进行判断,游标没有向下移动
next返回下一个元素对象,并将游标向下一个元素移动
每调用一次remove方法之前必须调用一次next方法,因为remove方法删除的是上一次next方法返回的元素