我想快速删除ArrayList
中的最后一个对象。
我知道remove(Object O)
在O(n)
中占用ArrayList
,但我想知道是否可以在固定时间内执行此操作,因为我只想删除 last < / strong>对象?
答案 0 :(得分:63)
请参阅the documentation for 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;
}
答案 1 :(得分:-1)
只需使用。
arraylist.remove(arraylist.size() - 1)