【发布时间】:2011-12-16 03:40:51
【问题描述】:
我在某处读到 ArrayList 的 add() 和 remove() 操作在“摊销常数”时间内运行。这到底是什么意思?
在add(item)的实现中可以看到ArrayList使用了一个数组缓冲区,最多是list的3/2大小,如果满了,System.arraycopy() 被调用,它应该在 O(n) 时间内执行,而不是 O(1) 时间。那么 System.arraycopy 是否会尝试做一些比将元素一个一个复制到新创建的数组中更聪明的事情,因为时间实际上是 O(1)?
结论:add(item) 运行在摊销的常数时间内,但 add(item, index) 和 remove(index) 不' t,它们以线性时间运行(如答案中所述)。
【问题讨论】:
-
线程stackoverflow.com/questions/200384/constant-amortized-time中Amortized Constant含义的说明
标签: java performance collections arraylist