我想解释这个问题的最好方法是迭代链表和数组。
给定一个大小为n的数组和链表纯粹基于移动到不同内存地址所花费的时间,迭代遍历数组比迭代链表更快。由于数组是连续的内存块,链接列表包含指向内存中其他位置的指针,因此数组会更快吗?如果它的内存量足够大,那么速度会有明显的差异吗?
感谢您的任何意见!
答案 0 :(得分:2)
阵列会更快。想想这样,对于链接列表,您需要找到元素 i ,您需要查看每个节点并找到指向移动到下一个元素的指针。虽然对于数组我们只需要在内存中移位(基于数据类型),并且大多数情况下大多数CPU的移位都是快速操作,比查看指针并移动到它的位置更快。
更重要的是,对于数组,可以并行找到下一个元素,我们不需要知道 i-1 是什么来找到元素 i 。但是对于链表,您需要知道找到下一个元素的最后一个元素。当你迭代一个数组时(如果你有一个好的缓存),它可以将下一个元素移动到缓存中以便更快地访问。主要用于迭代缓存很可能被存储和使用。对于链表,您无法预测下一个要放入缓存的项目,因为它可以是随机的。