java源码解析 - Iterator
2023-12-20 07:05:16
定义
Iterator是一个泛型接口,里面分别定义了四个方法
- boolean hasNext();
- E next();
- default void remove();
- default void forEachRemaining(Consumer<? super E> action);
其中hashNext()和next()方法在集合中经常用到,其在ArrayList中的实现如下:
实现
ArrayList中Iterator的实现类如下,类中定义的属性为:
private class Itr implements Iterator<E> {
int cursor; // index of next element to return
int lastRet = -1; // index of last element returned; -1 if no such
int expectedModCount = modCount;
Itr() {}
...
}
其中cursor相当于游标的概念,用于指定在List上的下一个元素,lastRet初始值为-1,用于指定返回某个元素。
ArrayList中的简化图如下:
boolean hasNext()
public boolean hasNext() {
return cursor != size; //通过比较游标和size,判断下一个元素是否还存在
}
default void remove()
// 告诉编译器忽略指定类型的警告信息,前提是coder知道这个类型转换是安全的
@SuppressWarnings("unchecked")
public E next() {
checkForComodification(); // 检查该次对于迭代器的操作是安全的
int i = cursor;
if (i >= size)
throw new NoSuchElementException();
Object[] elementData = ArrayList.this.elementData;
if (i >= elementData.length)
throw new ConcurrentModificationException();
cursor = i + 1; // 将cursor往后移一位
return (E) elementData[lastRet = i]; //返回的是lastRet对应的元素
}
文章来源:https://blog.csdn.net/kwb2015130086/article/details/135073860
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!