迭代arraylist并在java中删除

时间:2014-02-12 06:18:44

标签: java arrays

当我删除arraylist中的一些中间元素时会发生什么?它会自动重新排列整个数组列表吗?例如,考虑以下情况

list.add(one);    /** has index 0 ***/
list.add(two);    /** has index 1 ***/
list.add(three);  /** has index 2 ***/

如果我删除了索引为1的第二个元素,那么具有“三个”的对象的索引是什么。当数组列表的大小很大时,arraylist会自动重新排列整个列表及其索引吗?

3 个答案:

答案 0 :(得分:1)

来自JLS

Removes the element at the specified position in this list. 
Shifts any subsequent elements to the left (subtracts one from their indices). 

答案 1 :(得分:0)

来自ArrayList的来源

 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; // Let gc do its work

    return oldValue;
    }

可以看出它创建了一个副本。因此,索引将被更新

答案 2 :(得分:0)

如果使用索引操作修改arraylist,则会按照您的理解重新排列ArrayList。这就是为什么如果修改太多,ArrayLists的代价很高

这就是删除(int)文档所说的

Removes the element at the specified position in this list. Shifts any subsequent elements to the left (subtracts one from their indices).