HashMap和TreeMap有什么区别?

kkd*_*s02 157 java

我开始学习Java.我什么时候在TreeMap上使用HashMap?

TM.*_*TM. 238

TreeMap是a的一个示例SortedMap,这意味着可以对键的顺序进行排序,并且当遍历键时,您可以预期它们将按顺序排列.

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

HashMap 一般来说会更有效率,所以每当你不关心键的顺序时就使用它.

  • `HashMap`更节省时间.`TreeMap`更节省空间. (134认同)
  • TreeMap仅适用于Comparable对象,HashMap仅适用于具有合适hashCode()实现的对象. (41认同)
  • @erickson:您可以发布一个参考/链接来备份这个声明吗? (11认同)
  • `TreeMap`搜索复杂度为O(log(N)),`HashMap`为O(1),具有良好的hashCode(). (4认同)
  • HashMap允许空键和空值(只允许一个空键).如果TreeMap使用自然排序或其比较器,则不允许使用null键,将引发异常. (2认同)

pie*_*fou 58

HashMap由Hash Table TreeMap实现,同时由Hash Table 实现Red-Black tree.主要区别在于HashMapTreeMap实际上反映了a Hash和a 之间的主要区别Binary Tree,也就是说,在迭代时,TreeMap保证可以通过元素的compareTo()方法或TreeMap的构造函数中设置的比较器确定的键顺序.

看看下面的图表.

在此输入图像描述


小智 33

总结一下:

  • HashMap:查找数组结构,基于hashCode(),equals()实现,O(1)运行时复杂度,用于插入和搜索,未排序
  • TreeMap:树形结构,基于compareTo()实现,O(log(N))运行时复杂度用于插入和搜索,排序

取自:HashMap vs. TreeMap

  • HashMap的复杂性是O(1 + a).取决于hashCode函数,"a"在最坏的情况下可以达到"n". (2认同)

nan*_*nda 22

HashMap大部分的时间,但使用TreeMap时需要重点进行排序(当你需要遍历键).

  • 现实世界中键是否排序很重要的示例是什么? (2认同)

use*_*386 13

我将在Java中讨论HashMapTreeMap实现:

  • HashMap - 实现基本的地图界面

    1. 由桶数组实现,每个桶是条目的LinkedList
    2. 基本操作的运行时间:put(),平均O(1),最坏情况O(n),在表调整大小时发生; get(),remove(),平均O(1)
    3. 不同步,同步它: Map m = Collections.synchronizedMap(new HashMap(...));
    4. 地图的迭代顺序是不可预测的.
  • TreeMap - 实现可导航的地图界面

    1. 由红黑树实施
    2. 基本操作的运行时间:put(),get(),remove(),最坏情况O(lgn)
    3. 不同步,同步它: SortedMap m = Collections.synchronizedSortedMap(new TreeMap(...));
    4. 提供有序迭代.higherKey(),lowerKey()可用于获取给定键的后继者和前任者.

总而言之,HashMap和TreeMap之间最大的区别在于TreeMap的实现NavigableMap<K,V>,它提供了有序迭代的特性.此外,HashMap和TreeMap都是Java Collection框架的成员.您可以调查Java源代码以了解有关其实现的更多信息.


Jor*_*orn 7

您几乎总是使用HashMap,只有TreeMap在需要按键才能使用时才能使用.


fas*_*ava 7

HashMap用于快速查找,而TreeMap用于在地图上进行排序迭代.


Dhw*_*nit 6

除了排序的密钥库之外,另一个区别在于TreeMap,开发人员可以使用String键给(String.CASE_INSENSITIVE_ORDER),因此比较器在执行映射访问时的键比较时忽略键的大小写.这不可能通过HashMap提供这样的选项 - 它总是在HashMap中进行区分大小写的比较.