HashMap和TreeMap之间的区别

本文概述

  • 哈希图
  • 树状图
  • HashMap和TreeMap之间的相似之处
  • HashMap与TreeMap的示例
Java HashMap和TreeMap都是Java Collections框架的类。 Java Map实现通常充当存储桶的哈希表。当存储桶太大时, 它们将转换为TreeNodes的节点, 每个节点的结构都与java.util.TreeMap中的类似。
哈希图 HashMap实现Map < K, V> , Cloneable和Serializable接口。它扩展了AbstractMap < K, V> 类。它属于java.util包。
  • HashMap包含基于键的值。
  • 它可能具有单个null键和多个null值。
  • HashMap不会在迭代时保持顺序。
  • 它包含独特的元素。
  • 它基于哈希原理。
树状图 TreeMap类扩展AbstractMap < K, V> 类, 并实现NavigableMap < K, V> , Cloneable和Serializable接口。 TreeMap是SortedMap的示例。它由Red-Black树实现, 这意味着键的顺序已排序。
  • TreeMap还包含基于键的值。
  • TreeMap按键排序。
  • 它包含独特的元素。
  • 它不能具有null键, 但是具有多个null值。
  • 键按升序排列。
  • 它将对象存储在树结构中。
HashMap和TreeMap之间的相似之处
  • HashMap和TreeMap类实现Cloneable和Serializable接口。
  • 这两个类都扩展了AbstractMap < K, V> 类。
  • 映射是存储键值对的对象。在键值对中, 每个键都是唯一的, 但是它们的值可以重复。
  • 这两个类都表示从键到值的映射。
  • 两个地图都不同步。
  • 地图使用put()方法在地图中添加元素。
  • 如果映射以任何方式进行修改, 则迭代器将引发ConcurrentModificationException。
HashMap和TreeMap之间的主要区别是:
HashMap不保留迭代顺序, 而TreeMap通过使用compareTo()方法或在TreeMap的构造函数中设置的比较器保留顺序。
下表描述了HashMap和TreeMap之间的区别。
基础 哈希图 树状图
Definition Java HashMap是基于哈希表的Map接口实现。 Java TreeMap是Map接口的基于Tree结构的实现。
Interface Implements HashMap实现Map, Cloneable和Serializable接口。 TreeMap实现NavigableMap, Cloneable和Serializable接口。
空键/值 HashMap允许单个null键和多个null值。 TreeMap不允许使用空键, 但可以具有多个空值。
同质/异质 HashMap允许异构元素, 因为它不对键执行排序。 由于排序, TreeMap允许将齐次值作为键。
Performance HashMap比TreeMap更快, 因为它为诸如get()和put()之类的基本操作提供了O(1)的恒定时间性能。 与HashMap相比, TreeMap速度较慢, 因为它为大多数操作(如add(), remove()和contains())提供O(log(n))的性能。
数据结构 HashMap类使用哈希表。 TreeMap在内部使用Red-Black树, 这是一种自平衡二进制搜索树。
Comparison Method 它使用Object类的equals()方法比较键。 Map类的equals()方法将其覆盖。 它使用compareTo()方法比较键。
Functionality HashMap类仅包含诸如get(), put(), KeySet()等基本功能。 TreeMap类具有丰富的功能, 因为它包含如下功能:tailMap(), firstKey(), lastKey(), pollFirstEntry(), pollLastEntry()。
元素顺序 HashMap不维护任何顺序。 元素以自然顺序(升序)排序。
Uses 当我们不需要按排序顺序的键值对时, 应使用HashMap。 当我们需要按排序(升序)顺序的键值对时, 应使用TreeMap。
HashMap与TreeMap的示例 【HashMap和TreeMap之间的区别】在以下示例中, 我们可以观察到HashMap的元素按随机顺序排列, 而TreeMap的元素按升序排列。
import java.util.Map; import java.util.HashMap; import java.util.TreeMap; public class HashMapVsTreeMapExample{public static void main(String args[]){/*------------HashMap implementation----------------*/Map< Integer, String> hm=new HashMap< Integer, String> (); //adding elements to the HashMaphm.put(9, "Red"); hm.put(12, "Black"); hm.put(6, "Green"); hm.put(19, "White"); System.out.println("HashMap iteration Order:"); //iteration over map using for each loopfor(Map.Entry< Integer, String> entry: hm.entrySet()){//getting keys and values using methodSystem.out.println(entry.getKey() + " = " +entry.getValue()); }/*------------TreeMap implementation----------------*/Map< Integer, String> tm=new TreeMap< Integer, String> (); //adding elements to the TreeMaptm.put(9, "Red"); tm.put(12, "Black"); tm.put(6, "Green"); tm.put(19, "White"); System.out.println("TreeMap iteration Order:"); //iteration over map using for each loopfor(Map.Entry< Integer, String> entry: tm.entrySet()){//getting keys and values using method //prints list in sorted orderSystem.out.println(entry.getKey() + " = " +entry.getValue()); }}}

输出:
HashMap和TreeMap之间的区别

文章图片

    推荐阅读