【发布时间】:2010-12-21 20:32:28
【问题描述】:
我正在寻找一种类似于队列的数据结构,这样我就可以拥有先进先出的行为,但理想情况下,我还可以在恒定时间内查看该队列中是否存在元素使用 HashMap,而不是使用 LinkedList 获得的线性时间。
我认为 LinkedHashMap 可能会完成这项工作,但是虽然我可以创建一个迭代器,然后取出迭代的第一个元素以生成一种 poll() 方法,但我想知道是否有更好的方法方式。
在此先感谢
【问题讨论】:
-
HashMap 没有固定的时间访问,它看起来像这样,因为内部有散列。访问时间是
O(n)/bucketsize,在大多数情况下可能是1,但它仍然是O(n)/bucketsize(这是线性的)。 -
我将其描述为 O(log(log(n)),与我观察到的非常匹配。c.f. TreeSet 是 O(log(n)),一百万个条目比 10 慢大约 5 倍。一百万个条目上的 HashSet contains() 大约比 10 慢 1.5 倍(忽略缓存行为)集合是否在缓存中会产生更大的差异。;)
标签: java data-structures