概述
iterator通常会引起问题,因为开发人员经常不知道它是如何工作的。以下代码来自的源代码ArrayList。
一个常见的问题是抛出java.util.ConcurrentModificationException。该异常实际上是在remove方法中引发的。remove()必须被称为next()。如果remove()在之前被调用next(),modCount != expectedModCount则满足并满足条件的条件会更改arraylist的大小,并引发ConcurrentModificationException。
...
public Iterator<E> iterator() {
return new Itr();
}
/**
* An optimized version of AbstractList.Itr
*/
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;
public boolean hasNext() {
return cursor != size;
}
@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;
return (E) elementData[lastRet = i];
}
public void remove() {
if (lastRet < 0)
throw new IllegalStateException();
checkForComodification();
try {
ArrayList.this.remove(lastRet);
cursor = lastRet;
lastRet = -1;
expectedModCount = modCount;
} catch (IndexOutOfBoundsException ex) {
throw new ConcurrentModificationException();
}
}
final void checkForComodification() {
if (modCount != expectedModCount)
throw new ConcurrentModificationException();
}
}
...
最后
以上就是光亮板凳为你收集整理的Java:深入了解ArrayList.iterator()的全部内容,希望文章能够帮你解决Java:深入了解ArrayList.iterator()所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复