在调试程序期间添加元素时为什么列表不会改变?

smi*_*ith 1 java collections list arraylist

我创建了这个程序.

    List<Integer> l = new ArrayList<>();
    l.add(1);
    l.add(5);
    l.add(112);

    Iterator i = l.iterator();      
    while(i.hasNext())
    {
        System.out.println(i.next());

    }
    Iterator ii = l.iterator();

    while(ii.hasNext())
    {
        System.out.println(ii.next());

    }
Run Code Online (Sandbox Code Playgroud)

我在调试时运行这个程序.

调试点已打开Iterator i = l.iterator(); .

此时,我通过进入eclipse中的变量选项卡在列表中添加了一个整数.

我补充说Integer.valueof(34);.

现在,当我完全运行该程序时,它会打印出来

1
5
112
1
5
112
Run Code Online (Sandbox Code Playgroud)

为什么第二个迭代器没有打印34.它也没有给我一个ConcurrentModificationException例外.

谢谢.

NPE*_*NPE 5

这听起来像你直接改变l.elementData[3]null一个Integer.由于你直接 - 并且不一致 - 搞乱了班级的内部,因此不能保证继续按照合同行事.

在我的实现中,添加元素也需要更改l.size.故障快速机制依赖于l.modCount,需要递增.

换句话说,要ArrayList.add()手动模仿,您需要检查实现的源代码,并执行实际实现的所有步骤.