为什么ArrayList获取操作是恒定时间

时间:2013-08-14 15:21:13

标签: arraylist time-complexity

根据这个答案here

我无法理解为什么ArrayList get(n)是O(1)?如果我想要一个ArrayList的最后一个元素,我需要从头到尾遍历列表,这与列表的大小成正比,即O(n)。

我哪里错了?

1 个答案:

答案 0 :(得分:0)

没有。如果你知道你想要什么元素,你可以通过查找

来获得它
int a[] = new int[100];
int i = a[100]; // Will be as fast as
int j = a[0];

ArrayList由数组支持。

数组是一系列按顺序存储在内存中的元素,数组从内存中的已知点开始。获取某个元素很简单,只需要在起始地址中添加所需的位置即可。

如果a - 数组的起始地址为n,则第一个元素将位于n+0,而hundreth元素将位于地址n+100。没有必要迭代元素直到您正在寻找的元素。

在C中,这意味着如果

int a[] = {1,5,7,2};
int *p = a;

if (a[2] == *(p+2)) {
    // a lookup is a simple addition of the address
}