本文概述
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());
}
}
}
输出:
评论前必须登录!
注册