Я хочу быстро удалить последний объект из ArrayList.
Я знаю, что remove(Object O) принимает O(n) в ArrayList, но мне интересно, можно ли это сделать в постоянное время, так как просто хочу удалить объект last?
Вот как это реализовано. elementData выполняет поиск массива поддержки (поэтому он может вырезать его из массива), который должен быть постоянным (поскольку JVM знает размер ссылки на объект и количество записей, которые он может вычислить смещение), и numMoved для этого случая 0:
public E remove(int index) {
rangeCheck(index); // throws an exception if out of bounds
modCount++; // each time a structural change happens
// used for ConcurrentModificationExceptions
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;
}