【发布时间】:2020-01-23 16:55:19
【问题描述】:
当使用 ArrayList 中的 add(index, element) 方法在某个索引处添加元素时,它将元素放置在该索引处,而所有其他元素将它们的索引更改为 1(它们在内存中移动)。这就是 ArrayList 在特定位置添加元素时具有 O(n) 复杂度的原因。
如果是双重LinkedList,我知道元素有指向前一个元素的指针,也有指向下一个元素的指针。
我的问题是,当使用 LinkedList 相关的 add(index, element) 方法时,幕后实际会发生什么?我知道使用 LinkedList 其余元素不会在内存中移动,那么为什么它们仍然可以放置在某个索引处而不在内存中移动?
【问题讨论】:
-
LinkedList 上的索引与连续的内存位置不对应。相反,
get()方法需要遍历列表才能访问正确的索引。这就是为什么ArrayList::get的复杂度为 O(1)(它可以直接跳转到正确的内存地址),而LinkedList::get的复杂度为 O(n)。