ArrayList - 删除元素,将列表向下移动?

Nic*_*aro 3 java android

这是一个非常直截了当的问题......真的无法在网上找到直截了当的答案.

考虑我有一个List<String> listOfStrings = new ArrayList();,它填充了20个值.

如果listOfStings.get(0) = zero,listOfStrings.get(1) = one等...

而我呢 listOfStrings.remove(0)

listOfStrings.get(0)成为null,或将元素下移所以 listOfStrings.get(0)变成one

Sot*_*lis 9

实施ArrayList#remove(E)如下

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;
}
Run Code Online (Sandbox Code Playgroud)

elementData支撑元件阵列在哪里.

换句话说,它不是一个转变,因为它是一个元素的副本,减去缺少的元素.

给予elementData10名elemet人

[ 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10]
                  ^ index 4
Run Code Online (Sandbox Code Playgroud)

删除索引4处的元素会有效

// copy elements starting from index+1
[ 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10]
                      ^ index+1

// to the same array starting at index
[ 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10]
                  ^ index     

// resulting in
[ 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | null ]
Run Code Online (Sandbox Code Playgroud)

get(4) 然后会返回值(6)`.

ListAPI状态

删除此列表中指定位置的元素(可选操作).将任何后续元素向左移位(从索引中减去一个).返回从列表中删除的元素.

如何实现取决于实现者.以上就是ArrayList实施.