这是一个非常直截了当的问题......真的无法在网上找到直截了当的答案.
考虑我有一个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?
实施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实施.