今天看ArrayList源码,发现clear方法中的清除过程如下
`public void clear() {
modCount++;
// clear to let GC do its work
for (int i = 0; i < size; i++)
elementData[i] = null;
size = 0;
}`
不明白为什么需要遍历elementData中的每个元素并赋值为null,不能是直接elementData=null吗?
咋一看起来,好像下面的方法更简单:
但是有一个原因让这种做法不可行:
elementData
不是私有的!在设计上,为了效率,
elementData
是包可见的,会被其他类(主要是ArrayList
的内部迭代器类)直接引用。如果采用上面的做法,就可能会导致迭代器与数据不一致问题。