关于java:HashMap和TreeMap有什么区别?

What is the difference between a HashMap and a TreeMap?

本问题已经有最佳答案,请猛点这里访问。

我开始学习Java。我什么时候在树映射上使用哈希映射?


TreeMapSortedMap的一个示例,这意味着可以对键的顺序进行排序,并且在对键进行迭代时,可以预期它们将按顺序排列。

另一方面,没有这样的保证。因此,在迭代HashMap的键时,您无法确定它们的顺序。

一般来说,HashMap会更有效,因此无论何时您不关心键的顺序,都可以使用它。


HashMap由哈希表实现,而TreeMapRed-Black tree实现。HashMapTreeMap之间的主要区别实际上反映了aHash和aBinary Tree之间的主要区别,也就是说,在迭代时,treemap保证可以是由元素的compareTo()方法或在treemap的cons中设置的比较器确定的键顺序。卡车司机。

看看下面的图表。

enter image description here


总结如下:

  • hashmap:查找数组结构,基于hashcode(),equals()实现,o(1)插入和搜索的运行时复杂性,未排序
  • treemap:树结构,基于compareto()实现,o(log(n))插入和搜索的运行时复杂性,排序

取自:hashmap与treemap


大多数情况下使用HashMap,但需要对密钥进行排序时(需要迭代密钥时)使用TreeMap


我将在Java中讨论HashMap和TeReMAP实现:

  • hashmap——实现基本映射接口

  • 由一个存储桶数组实现,每个存储桶都是一个条目的LinkedList
  • 基本操作的运行时间:Put()、Average O(1)、Worst Case O(N),在调整表大小时发生;get()、remove()、Average O(1)
  • 不同步,要同步它:Map m = Collections.synchronizedMap(new HashMap(...));
  • 地图的迭代顺序是不可预测的。
  • treemap——实现可导航地图接口

  • 由红黑树实现
  • 基本操作运行时间:put()、get()、remove()、worst case o(lgn)
  • 不同步,要同步它:SortedMap m = Collections.synchronizedSortedMap(new TreeMap(...));
  • 提供有序迭代。higherkey()、lowerkey()可用于获取给定键的后续项和前置项。

总之,hashmap和treemap最大的区别在于treemap实现了NavigableMap,这提供了有序迭代的特性。此外,HashMap和TeeMeAP都是Java集合框架的成员。您可以研究Java的源代码,以了解更多关于它们的实现。


HashMap用于快速查找,而TreeMap用于映射上的排序迭代。


您几乎总是使用HashMap,如果您需要您的密钥按特定顺序排列,则只应使用TreeMap


除了排序后的密钥存储,Treemap的另一个不同之处在于,开发人员可以用字符串键给出(string.case不区分大小写的顺序),因此比较器在对映射访问上的密钥进行比较时忽略键的大小写。对于hashmap,这是不可能给出这样的选项的-在hashmap中,它总是区分大小写的比较。