Я новичок в Java и сейчас изучаю Коллекции на Java. Меня смущает то, что я не могу понять, как работает функция removeElementAt
Когда я читаю исходный код Vector
.
Смысл, который озадачил меня, заключается в том, что эта функция удаляет элемент, копируя эти оставшиеся элементы с помощью функции System.arraycopy
, которая просто копирует исходный массив в пункт назначения, ограниченный указанной длиной. Что, если я хочу удалить эти элементы, насередина массива? Я предполагаю, что он отбросит те элементы, которые находятся за элементом spcified, но он не работает так, как я думал.
Функция removeElementAt
:
public synchronized void removeElementAt(int index) {
modCount++;
if (index >= elementCount) {
throw new ArrayIndexOutOfBoundsException(index + " >= " +
elementCount);
}
else if (index < 0) {
throw new ArrayIndexOutOfBoundsException(index);
}
int j = elementCount - index - 1;
if (j > 0) {
System.arraycopy(elementData, index + 1, elementData, index, j);
}
elementCount--;
elementData[elementCount] = null; /* to let gc do its work */
}
Ниже приведен мой тестовый код:
/**
* Test if it will discard those element in the back
*/
public void TestRemoveElementAt(){
Vector<Integer> vector = new Vector<Integer>();
for(int i=0;i<10;i++){
vector.addElement(i);
}
// try to remove the number "7"
vector.removeElementAt(7);
// expected: 0 1 2 3 4 5 6
// actual: 0 1 2 3 4 5 6 8 9
vector.iterator().forEachRemaining(ele->System.out.print(ele+"\t"));
}
Что не так с моей гипотезой?