哪一个更快,为什么?1.阵列2.链接列表.如果我们只想在for循环中迭代并打印它

Which one is faster and why? 1. Array 2. Link List. If we just want to iterate in for loop and print it

本文关键字:for 只想 我们 循环 打印 迭代 如果 列表 为什么 链接 阵列      更新时间:2023-10-16

哪一个更快,为什么?1.阵列2。链接列表。如果我们只想在for循环中迭代并打印它,而不考虑cpu缓存。

无论对象存储在哪里,"打印它"部分都是相同的。

唯一不同的部分是"移动到下一个项目"。

对于一个数组,它涉及到增加一个指针——很可能是CPU中最快的操作。

对于链表,它涉及到从内存加载一个值——这是一个非常快的操作,但不如递增快。

还有其他的担忧。数组将是连续的,并且比链表占用更少的总体空间,这意味着可以更好地使用缓存。

但是,请记住——两者都快得惊人——但是,数组会稍微快一点。

差异可以忽略不计。这将取决于如何编写循环,以及编译器中的优化。如果您在gui中将其打印到屏幕上,那么这本身将比两者加在一起有更多的开销。

假设您的查询只是关于顺序访问的。

对于顺序访问,阵列在任何给定时间都会更快,主要原因是更新的CPU为此进行了优化。

如果我们忽略CPU优化,即使在那之后阵列访问也会更快。让我们看看这两种操作的步骤,这将有助于理解原因。

阵列访问:

int a[10];
int *ptr = a;

访问下一个元素就是进行

*(ptr++);

所涉及的操作是
1.ptr的读取值
2.将当前值增加1
3.访问新地址

链表:

Node {  
  int data;  
  Node* next;
};

访问下一个数据将是这个

(*(node->next))->data;  
  1. 节点的读取值
  2. 移入地址表以联系下一个成员
  3. 读取next的值
  4. 访问next的值

希望这能帮助你理解为什么数组访问会更快。当您为阵列1&2将被进一步优化。话虽如此,在实际应用中,您会感觉到的差异可以忽略不计

数组比链表更快。主要是因为数组连续存储所有元素。基本链接列表不能保证后续访问。

不考虑cpu缓存是一个非常奇怪的假设,因为主要是缓存提供了在链表上使用数组的主要性能。

链表具有将元素相互连接的指针,而数组并没有这种加重的结构。您对数组进行迭代,但不直接对链表进行迭代。

你不应该用大O符号来进行数学比较,因为这会给出相同的性能("细节中的魔鬼")。

与LinkedList相比,数组总是更快。。数组将数据直接存储到内存位置。Linkedlist将创建节点,向节点添加数据,然后存储它。再次迭代时,Linkedlist会使用指针指向下一个元素并打印,而在数组中,u只提供从0到sizeof array的位置。。。

相关文章: