数据结构:hashmap vs linkedhashmap vs treemap

时间:2013-08-10 15:08:39

标签: performance hashmap time-complexity treemap linkedhashmap

我看到有很多关于这三者之间差异的问题。告诉我,如果我错了,但如果我总结一下我能读到的内容:

  • Hashmap:一般会更有效率; O(1)(正常情况), O(N)(最差情况下,只有错误的哈希算法)
  • LinkedHashmap:维护元素的插入顺序,比hashmap占用更多内存
  • Treemap:维护元素排序, O(log(n))(平衡时)

我的问题是:为什么我们需要维护插入顺序或排序的元素,如果最终要插入的性能,查找..更好用hashmap

2 个答案:

答案 0 :(得分:2)

我们有时需要主插入顺序,因为我们需要插入顺序来解决手头的问题。听起来有点同义反复,但这才是真正的原因。有些数据是有序的,但也可以从随机访问中获益。

同样适用于排序。它提供了一种非常便宜地找到“下一个”或“上一个”项目的方法,同时对于任意查找仍然具有合理的效率。一个例子是近似查找,比如说,你知道你要查找的条目以Foo开头,但你不知道密钥的其余部分是什么。

当您不需要任何这些操作时,Hashmap的存在会使事情变得更快更简单(没有顺序概念),只有精确查找。

答案 1 :(得分:1)

我使用Treemap和LinkedHashMap,因为虽然我自己可以对HashMap进行排序,但我怀疑我的解决方案与Java的解决方案一样快或内存效率高。