Java Iterator remove()的问题

UmbrellaSinger 2018-01-23 12:00:19
测试代码:
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”;
我是在搞不懂了,跪求大大解答。
...全文
237 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧