在循环操作中,使用remove(int index)方法的index去移除数组的元素的时候,将会生成一个新的数组,每个元素的的数组下标已经改变。
比如:原来的数组是{2,4,8,10},移除掉index=1的数组元素,新的数组将变为{2,8,10},循环操作元素将会出错。如果想循环则可以使用下面的写法
for (int i = 0; i < list.size();) {
if(list.get(i) != list.remove(i)) {
i++;
}
}
相关代码块:
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;
}