ArrayList
から最後のオブジェクトをすばやく削除したい。
remove(Object O)
はArrayList
でO(n)
を取ることを知っていますが、lastオブジェクト?
次の構文のように、 ArrayList#remove(int)
のドキュメント を参照してください。
list.remove(list.size() - 1)
実装方法は次のとおりです。 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;
}
単に使用します。
arraylist.remove(arraylist.size() - 1)