在java.util.ArrayList中初始化modCount时?

时间:2018-11-14 13:20:50

标签: java iterator

我想知道何时初始化java.util.ArrayList的字段modCount。从java.util.ArrayList的源代码中,我们知道字段modCount继承自 java.util.AbstractList。在名为Itr的java.util.ArrayList的私有内部类中,其字段ExpectedModCount是从modCout分配的,如下所示

enter image description here

在一个演示中,我调试了一下,发现itr.expectedModCount已初始化。因为ExpectedModCount的值来自modCount。所以我在源代码中查找了modCount初始化的时间,但失败了。

enter image description here

2 个答案:

答案 0 :(得分:2)

它初始化为0(请注意,它是AbstractList超类的实例变量):

protected transient int modCount = 0;

,并在List进行结构修改(即添加或删除元素)的几个位置递增。

例如:

public E remove(int index) {
    rangeCheck(index);

    modCount++;
    ....
}

请注意,Itr类是ArrayList的内部类,因此它可以访问封闭的ArrayList实例(包括modCount实例)的成员。 AbstractList超类的变量)。

答案 1 :(得分:0)

当我查找modCount所在的位置时,可以找到它,它位于java.util.AbstractList内部,并声明为:

protected transient int modCount = 0;

这意味着它在声明时已初始化。