对于特定类型的ArrayList,我们可以在ArrayList中找到对象(特定类型的)的大小,并直接在O(1)中的任何索引处访问该对象。这是因为对象引用存储在ArrayList中的连续内存块中,因此通过跳过object_size * index
内存位置,我们访问所需对象的引用所在的内存位置。
然而,在LinkedList中,我们必须遍历每个对象,直到我们到达所需的对象。
对于包含不同类型对象(具有不同大小)的通用ArrayList,是否在O(1)中完成get(index i)
?如果是这样,怎么样?
答案 0 :(得分:6)
你是在误解下工作的。对象不存储在数组中,只有对象的引用(即指针)存储在数组中。对象本身就在堆上。因此,通过索引查找ArrayList
中的特定对象始终为O(1)
,无论其包含什么内容,LinkedList
将为O(n)
。