java集合ArrayList的remove相关注意点

循环操作中,使用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;
    }

猜你喜欢

转载自blog.csdn.net/hfc189933/article/details/81941688