我看到有很多关于这三者之间差异的问题。告诉我,如果我错了,但如果我总结一下我能读到的内容:
Hashmap
:一般会更有效率; O(1)(正常情况), O(N)(最差情况下,只有错误的哈希算法)LinkedHashmap
:维护元素的插入顺序,比hashmap占用更多内存Treemap
:维护元素排序, O(log(n))(平衡时)我的问题是:为什么我们需要维护插入顺序或排序的元素,如果最终要插入的性能,查找..更好用hashmap
?
答案 0 :(得分:2)
我们有时需要主插入顺序,因为我们需要插入顺序来解决手头的问题。听起来有点同义反复,但这才是真正的原因。有些数据是有序的,但也可以从随机访问中获益。
同样适用于排序。它提供了一种非常便宜地找到“下一个”或“上一个”项目的方法,同时对于任意查找仍然具有合理的效率。一个例子是近似查找,比如说,你知道你要查找的条目以Foo
开头,但你不知道密钥的其余部分是什么。
当您不需要任何这些操作时,Hashmap的存在会使事情变得更快更简单(没有顺序概念),只有精确查找。
答案 1 :(得分:1)
我使用Treemap和LinkedHashMap,因为虽然我自己可以对HashMap进行排序,但我怀疑我的解决方案与Java的解决方案一样快或内存效率高。