HashMap剖析

HashMap在Java中除了集合(Collection)类型应该是用得最多的处理K-V(键值对)映射关系数据的数据结构,如其名HashMap,其中比较重要的”Hash”部分即为了表示元素被哈希存储到指定位置,也通过哈希去重,譬如HashSet所用的存储方案就是通过HashMap的key部分存储元素,而所有value都是一个空对象(private static final Object PRESENT = new Object();).对于一个出现频率极高的数据结构,了解其底层实现有助于更优雅、高效地使用它。

简介

几乎所有Key-Value结构的数据结构都实现java.util.Map<K, V>接口,且实现对键值对的集合常用的操作:

1
2
3
4
5
6
7
8
9
10
11
12
size()
isEmpty()
containsKey(Object)
containsValue(Object)
get(Object)
put(K, V)
putAll(Map<K, V>)
remove(Object)
clear()
keySet()
values()
entrySet()

而在jdk中Map的实现主要有以下几种:HashMap, LinkedHashMap, TreeMap, WeakHash, Ident ityHashMap, 继承字典的 Hashtable和 Properties, 以及并发包下的实现 ConcurrentHashMap以及 ConcurrentSkipListMap.
Map-Class-Diagram

HashMap

HashMap作为最常用的K-V数据结构,

Hashtable

ConcurrentMap

SortedMap