根据这个答案here
我无法理解为什么ArrayList get(n)是O(1)?如果我想要一个ArrayList的最后一个元素,我需要从头到尾遍历列表,这与列表的大小成正比,即O(n)。
我哪里错了?
答案 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
}