个性化阅读
专注于IT技术分析

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的元素按升序排列。

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 HashMap
hm.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 loop
for(Map.Entry<Integer, String>entry: hm.entrySet())
{
//getting keys and values using method
System.out.println(entry.getKey() + " = " +entry.getValue());
}
/*------------TreeMap implementation----------------*/
Map<Integer, String> tm=new TreeMap<Integer, String>();
//adding elements to the TreeMap
tm.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 loop
for(Map.Entry<Integer, String>entry: tm.entrySet())
{
//getting keys and values using method 
//prints list in sorted order
System.out.println(entry.getKey() + " = " +entry.getValue());
}
}
}

输出:

HashMap和TreeMap之间的区别

赞(2)
未经允许不得转载:srcmini » HashMap和TreeMap之间的区别

评论 抢沙发

评论前必须登录!