迭代排序在LinkHashMap / LinkedHashSet如何导致比HashMap的有点低性能

2019-09-28 01:36发布

正如LinkedHashMap的/设置保持在收藏项的顺序,这样就导致了低一点的性能。 我想知道为什么会这样。

Answer 1:

LinkedHash[Map/Set]使用双向链表来跟踪项目的顺序。 所以每当添加了一个元素,一个新的DLL节点必须创建。 分配需要一定的时间,和几个额外的指针需要进行设置。



Answer 2:

现在的问题是使无效假设LinkedHash [图/ SET]老是执行比非连锁的同行差。

该LinkedHash [图/ SET]具有保持用于形成链表指针的额外任务,这意味着略差(虽然仍是固定时间)的性能比哈希进行添加或删除时[图/ SET]。

然而,迭代一个LinkedHash [地图/ SET]时的表现也正比于组的大小 ,而所述非连接的对应方是正比于组的容量 。 当在一个Hash [地图/ SET]迭代最好的情况是,当容量大小刚好适合所有元素(即容量=大小),并在这样的情况下,具有相同的性能。 也请记住,除非你有一个非常静态组/图和设置的能力这是不可能的容量将等于大小。

所以,如果你更关心的是建立自己的地图/套,那么你应该选择一个HashMap或HashSet的表现,但如果你更关心的是循环访问该地图/集选择的LinkedHashMap或LinkedHashSet。

参见: http://docs.oracle.com/javase/6/docs/api/java/util/LinkedHashSet.html



Answer 3:

LinkedHashMap / Set包含两个数据结构:哈希表和链接列表,从而使插入和删除操作使得两个数据结构的变形例,而在简单的操作相同的操作HashMap触摸只有一个数据结构(哈希表)。 这就是为什么LinkedHashMap / Set较慢,占用更多的内存。



文章来源: How iteration ordering in LinkHashMap/LinkedHashSet leads to a bit low performance than HashMap