arraylist操作的运行时通过索引添加和删除

时间:2016-10-02 17:50:13

标签: java arraylist time-complexity asymptotic-complexity

对于Java ArrayList,准确地说是通过索引运行在分摊的常量时间中添加和删除,这意味着平均来说它是恒定时间(在极少数情况下,通过设置内存使线性时间更长,以便将来的操作更快)?

2 个答案:

答案 0 :(得分:0)

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

基于指数的add(并且从最后一个位置移除)不会按照常规时间摊销,它们是线性时间。

答案 1 :(得分:0)

不可以说,通过索引从ArrayList插入和删除元素是按照常量时间摊销是不准确的,因为没有用于复制数据的分期付款。

仅列出扩展及其关联的复制是分摊的,因为它们不经常发生 * 。但是,这需要在列表末尾插入。

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

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