本文概述
- 哈希图
- 树状图
- HashMap和TreeMap之间的相似之处
- HashMap与TreeMap的示例
哈希图 HashMap实现Map < K, V> , Cloneable和Serializable接口。它扩展了AbstractMap < K, V> 类。它属于java.util包。
- HashMap包含基于键的值。
- 它可能具有单个null键和多个null值。
- HashMap不会在迭代时保持顺序。
- 它包含独特的元素。
- 它基于哈希原理。
- TreeMap还包含基于键的值。
- TreeMap按键排序。
- 它包含独特的元素。
- 它不能具有null键, 但是具有多个null值。
- 键按升序排列。
- 它将对象存储在树结构中。
- HashMap和TreeMap类实现Cloneable和Serializable接口。
- 这两个类都扩展了AbstractMap < K, V> 类。
- 映射是存储键值对的对象。在键值对中, 每个键都是唯一的, 但是它们的值可以重复。
- 这两个类都表示从键到值的映射。
- 两个地图都不同步。
- 地图使用put()方法在地图中添加元素。
- 如果映射以任何方式进行修改, 则迭代器将引发ConcurrentModificationException。
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。 |
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());
}}}
输出:
文章图片
推荐阅读
- Java中HashSet和HashMap类之间的区别
- Array和ArrayList之间的区别
- Java中的ConcurrentModificationException
- Java中的ClassLoader
- 什么是CompletableFuture()
- Java中的ArrayIndexOutOfBoundsException
- 从Oracle数据库检索图像的示例
- Android开发——diglog cancel与dismiss方法区别
- CSAPP 3e: Bomb lab (phase_4)