【发布时间】:2016-06-30 08:44:51
【问题描述】:
由于缓存,迭代数组的连续元素通常被认为比迭代连续链表元素更有效。
只要元素具有基本数据类型,这无疑是正确的。但是如果元素是对象,我的理解是只有对对象的引用才会存储在数组的连续内存区域(很可能会被缓存),而实际的对象数据将存储在主内存中的任何位置,不能被有效缓存。
由于您通常不仅迭代容器,而且还需要在每次迭代中访问对象数据,这是否或多或少地扼杀了数组相对于列表的性能优势?
编辑:关于不同场景差异很大的评论可能是正确的。所以让我们考虑一个特定的:您在容器中搜索一个特定的对象。为了找到它,您需要将给定的字符串与作为对象的类变量的另一个字符串进行比较。
【问题讨论】:
-
“我的理解是,只有对象的引用才会存储在数组的连续内存区域”正确。问题其余部分的答案是“视情况而定”。不同的场景差异很大,这个问题没有通用的答案。
-
也许吧。不过有趣的问题;但如果你得到更多有用的答案而不是投票和关闭请求,我会感到惊讶。
-
IMO 数组仍然提供更快的访问,因为与 LinkedList 相比,到达下一个节点所需的操作数量更少。
标签: java arrays memory-management linked-list cpu-cache