由于缓存的原因,迭代数组的连续元素通常被认为比迭代连续链表元素更有效。
只要元素具有基本数据类型,这无疑是正确的。但是,如果元素是对象,我的理解是,只有对对象的引用将存储在数组的连续内存区域(可能被缓存),而实际的对象数据将存储在主内存的任何地方,不能有效地缓存。
通常不仅在容器上迭代,而且在每次迭代中还需要访问对象数据,这是否或多或少会扼杀数组相对于列表的性能优势?
编辑:关于不同场景差异很大的评论可能是正确的。让我们考虑一个特定的例子:在容器中搜索一个特定的对象。为了找到它,您需要将给定字符串与作为对象的类变量的另一个字符串进行比较。
不,对于对象("指针"),两者都有间接关系。链表需要每个节点都向下一个节点迈进。所以它仍然有一个开销
但是,从相对的角度来看,增益只涉及到一部分,非常大约是纯遍历的一半,包括间接步骤。
当然,每一次间接访问都会使访问更混乱,更慢。