【问题标题】:Removing last object of ArrayList in Java在 Java 中删除 ArrayList 的最后一个对象
【发布时间】:2013-06-03 23:23:36
【问题描述】:

我想快速从ArrayList 中删除最后一个对象。

我知道remove(Object O)ArrayList 中使用O(n),但我想知道是否可以在恒定时间内执行此操作,因为我只想删除 last 对象?

【问题讨论】:

  • list.remove(list.size()-1) !!!
  • 堆栈在这里会是更好的解决方案吗?
  • 删除最后一个元素是一个常数时间操作,因为不需要向左移动任何元素
  • @TheNewIdiot 你应该把它作为答案发布... D:
  • @Arian Hosseinzadeh,好的,如果您知道语法,那么我可能假设您在问这个问题之前已经通过代码实现了它,如果不是,那么这是一个糟糕的问题,显示没有任何努力就你而言:)

标签: java data-structures arraylist


【解决方案1】:

参见the documentation for ArrayList#remove(int),语法如下:

list.remove(list.size() - 1)

这是它的实现方式。 elementData 对后备数组进行查找(因此它可以将其从数组中删除),这应该是恒定时间(因为 JVM 知道对象引用的大小以及它可以计算偏移量的条目数),对于这种情况,numMoved0

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;
}

【讨论】:

  • O1 这个? arraycopy 整个到,或者只是从末端松散地切割数组?
【解决方案2】:

只需简单地使用。

arraylist.remove(arraylist.size() - 1)

【讨论】:

  • 这已经被回答了(我保证我不是投反对票的人,但这可能就是有人投反对票的原因)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-04
  • 2011-03-31
  • 2015-08-05
  • 1970-01-01
  • 2010-11-21
  • 1970-01-01
相关资源
最近更新 更多