Java Iterator remove()的问题
测试代码:
List<String> a = new ArrayList<String>();
a.add("1");
a.add("2");
Iterator<String> iterator = a.iterator();
while (iterator.hasNext()){
String temp = iterator.next();
if("2".equals(temp)){
iterator.remove();
}
//iterator.next();
}
当我不执行红色部分语句时,元素“2”正常从List中被删除,数组中只存在元素“1”;
但当我执行了next()方法后,元素“2”没有被删除,最后输出的时候数组的元素没有发生变化。
JDK remove()源码:
public E remove(int index) {
rangeCheck(index);
modCount++;
E oldValue = elementData(index);
int numMoved = size - index - 1;
if (numMoved > 0)
System.arraycopy(elementData, index+1, elementData, index,
numMoved);
elementData[--size] = null; // clear to let GC do its work
return oldValue;
}
当删除的是最后一个元素的时候,是直接将最后一个元素置空而不执行数组的变换。
那么这么说来,测试程序中标红的next();方法应该访问的是空值,但实际输出值是“2”;
我是在搞不懂了,跪求大大解答。