数组列表操作的运行时间按索引添加和删除

这个问题在这里已经有了答案:

  • 何时通过ArrayList使用LinkedList? 28个答案

  • 不,这是不准确的,因为索引中ArrayList中元素的插入和删除是分摊恒定时间,因为没有摊销进行数据复制。

    只有扩展名列表和它们相关的拷贝才会被分摊,因为它们很少发生*。 但是,这需要在列表末尾插入。

    当您在列表的开头插入时,扩展仍然会摊销,但每次调用都需要将元素移动1个位置所需的副本,且不会摊销。

    *为了能够分摊操作成本,您需要混合使用“便宜”和“昂贵”操作。 在这种情况下,您可以将所有操作的总成本分摊,从而获得较低的结果。


    对于add(Object)是的,但对于remove(int index) ,只有当你删除最后一个元素时,它才是常量时间,否则元素将被移动以从数组中移除任何nulls

    基于索引的add (以及从不是最后一个位置移除)不是摊销常量时间,它们是线性时间。

    链接地址: http://www.djcxy.com/p/19979.html

    上一篇: Runtime of arraylist operations add and remove by index

    下一篇: comparison of Linkedlist over arraylist