我为链接列表结构分配了一个大缓冲区,因此节点位于连续的内存块中。 当我尝试迭代链接列表时,有两种方式会导致不同的性能,如下所示:
while(index<ListCount) {
if (first[index++].key == key) { return;}
}
另一种方式是:
while(first) {
if (first->key == key) { return; }
first = first->next;
}
性能有很大不同,第二种方式远远落后于第一种方式,为什么会发生这种情况?
每个节点包含16个字节的变量,包括下一个指针。
答案 0 :(得分:1)
您似乎对伪代码感到满意,所以我正在回答伪代码。
我发现你索引的结构很可能是一个“链接”列表。假设您在链表中有1,000个元素。当你说,
yourList[1000]
访问第1000个元素的唯一方法是执行此操作
counter = 1000;
while(counter-- > 0) { //Ignoring potential off by 1 errors, this is for demonstration purposes only
node = node->next;
}
所以,如果在你的循环中,你的目标是通过访问你正在访问的索引元素来引用每个元素一次
元素1:1000次 元素2:999次 元素3:998次 元素4:997次 等等。
因为链接列表没有对其元素的直接访问权限,所以每次按索引访问元素时,它都必须遍历每个指针才能到达该元素。