ArrayList 源码分析 - 迭代器
ArrayList 源码分析-迭代器
迭代器内部参数:
int cursor
迭代过程中,下一个元素的位置,默认从 0 开始。int lastRet = -1
新增时表示上一次迭代过程中,索引的位置;删除时表示为 -1。int expectedModCount = modCount· expectedModCount
表示迭代过程中,期望的版本号modCount 表示数组的版本号。
迭代器主要方法:
hasNext():
此方法主要用于判断还有没有值可以迭代
cursor != size;
首先 cursor 表示下一个元素的位置,size 表示实际大小,如果相等的话,说明没有元素可以进行继续迭代了,如果不相等,则说明可以继续迭代
next():
此方法主要表示如果有值可以迭代,迭代的值是多少
checkForComodification();
表示迭代过程中,判断版本号有无被修改,有被修改,抛 ConcurrentModificationException 异常int i = cursor;
表示本次迭代过程中,元素的索引位置cursor = i + 1;
表示下一次迭代时,元素的位置,为下一次迭代做准备checkForComodification()
表示版本号比较
remove():
此方法主要删除当前迭代的值
if (lastRet < 0)
先判断上一次操作时,数组的位置是否已经小于 0 ,如果是的话,则数组已经被全部删除checkForComodification();
迭代过程中,判断版本号有无被修改,有被修改,抛 ConcurrentModificationException 异常lastRet = -1;
-1 表示元素已经被删除,也防止重复删除expectedModCount = modCount;
删除元素时 modCount 的值已经变化,赋值给 expectedModCount,下次迭代时,两者的值是一致的了
评论