【发布时间】:2016-04-30 17:40:30
【问题描述】:
有人告诉我
当我们创建一个 ArrayList 时,内部是一个特定大小的 Array (比如 50)被创建。当添加到列表中的项目超过 50,在内部创建一个更大的新数组(比如 100),并且 他们将原始数组的项目复制到这个新数组中。
然后有人告诉我
当我们从列表末尾删除一个项目时,所有这一切都完成了 内部是在内部减少列表的大小。但是 删除位于开头某处的元素 ArrayList 非常慢,因为它必须复制所有 后续项目退一步,所以很慢。
但是正如第一个引用中所暗示的那样,ArrayList 在内部由 Array 表示,并且由于一旦分配了数组就无法更改数组的大小;您必须创建一个新数组。
- 这意味着当一个元素在 ArrayList 的末尾被移除时,一个新的数组是 内部创建,其大小比原始大小小1 数组,并将第一个数组的所有元素复制到新数组中。
- 当从 ArrayList 的开头删除一个元素时,一个新的 数组是在内部创建的,其大小比 原始数组,并将第一个数组的所有元素复制到 新的,这样每个 subsequent 元素在新的索引位置 数组比该元素在 上一个/原始数组。
我的概念正确吗?
如果是,那么我不明白为什么从数组列表的开头删除元素所需的时间/步数比从末尾删除元素时要慢得多数组。
请帮助我理解。
【问题讨论】: