[英]Sort LinkedHashMap with LinkedList<Integer> as key
[英]Is a LinkedHashMap basically a LinkedList with O(1) 'contains'?
我现在面临一个微型优化,其中我打电话contains
frequenly上一个LinkedList。 将其更改为LinkedHashMap是一个好主意吗?
注意:我只是添加并检查列表是否包含某个值。
它比“仅具有平均大小写O(1)
包含的LinkedList
”要复杂得多,但是从本质上讲-功能是肯定的。
LinkedHashMap
允许O(1)
包含并按插入顺序保留元素-与LinkedList
相同。 您可能还想看看LinkedHashSet
但是 ,如果您想要重复的条目 ,则可能会遇到问题。 LinkedHashMap
和LinkedHashSet
正在实现Set
和Map
接口,而不是List
接口,因此它们不允许重复。
是的,LinkedHashMap提供O(1)成员资格检查
像HashMap一样,它假定哈希函数将元素正确分散在存储桶中,从而为基本操作(添加,包含和删除)提供恒定时间的性能。
另请注意
由于维护链表的额外费用,性能可能会略低于HashMap,但有一个例外:对LinkedHashMap的集合视图进行迭代需要的时间与地图的大小成正比,而无论其容量如何。 在HashMap上进行迭代可能会更昂贵,需要的时间与其容量成正比。
http://docs.oracle.com/javase/6/docs/api/java/util/LinkedHashMap.html
如果您不需要可预测的排序,则HashMap在插入/修改时会稍微快一些,因为它不需要维护链接列表来保留排序。
没有; LinkedList
是List
,而LinkedHashMap
是Map
。
除此之外, LinkedHashMap
不能保证O(1)包含; 实际上, LinkedHashMap.contains
是O(n)。 如果使用完美的散列或将键(大致)均匀分布到存储桶(即最佳情况),则可以使用恒定时间contains
,但是在发生冲突的情况下,它是平均情况下的线性时间,且常数因子0 < k <1。
您似乎想要的是具有平均大小写性能与HashMap.contains
相当的插入顺序Set
,因此建议您查看LinkedHashSet 。
此实现与
HashSet
不同之处在于,它维护贯穿其所有条目的双向链接列表。 此链表定义了迭代顺序,即将元素插入集合的顺序 ( insert-order )。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.