系列文章:
前言
前面介绍集合的框架时,我们提到集合框架中主要有List
,Set
,Map
三种数据类型,List
我们已经分析过了,而Set
的实现依赖于Map
,HashSet
是通过HashMap
实现的,TreeSet
是通过TreeMap
实现的,因此我们再来分析Map
。
本文源码分析基于jdk 1.8.0_121
关系图
![](https://img.haomeiwen.com/i12239413/10ad5da7148057e9.png)
-
Map
是具有映射关系的集合接口,储存内容是键值对 -
AbstractMap
是继承于Map
的抽象类,实现了Map
中大部分方法,类似AbstractList
-
SortedMap
是继承于Map
的接口,储存有序的键值对,排序是通过Comparator
实现的 -
NavigableMap
是继承于SortedMap
的接口,NavigableMap
有一系列的导航方法;如"获取大于/等于某对象的键值对"、“获取小于/等于某对象的键值对”等等 -
TreeMap
继承于AbstractMap
,并实现了NavigableMap
接口,储存有序的键值对 -
HashMap
继承于AbstractMap
,存储无序的键值对 -
WeakHashMap
继承于AbstractMap
,存储无序的“弱键值对” -
Hashtable
继承于Dictionary
,实现了Map
接口,储存无序的键值对,且是线程安全的,支持Enumeration
遍历。
Map
Map的定义如下:
public interface Map<K,V>
其储存了键值对,且不允许包含重复的键,一个键只能对应一个值,Map
可以单独查看键集、值集或键-值映射关系。
Map API
void clear()
boolean containsKey(Object key)
boolean containsValue(Object value)
Set<Entry<K, V>> entrySet()
boolean equals(Object o)
V get(Object key)
int hashCode()
boolean isEmpty()
Set<K> keySet()
V put(K key, V value)
void putAll(Map<? extends K, ? extends V> map)
V remove(Object key)
int size()
Collection<V> values()
-
keySet()
方法用于返回键集 -
values()
方法用于返回值集 -
entrySet()
方法用于返回键-值映射关系
Map.Entry
其定义如下:
interface Entry<K,V>
Map.Entry
是Map
的内部接口,Map.Entry
是键值对,Map通过entrySet()
获取Map.Entry
的键值对集合。
Map.Entry API
K getKey();
V getValue();
V setValue(V value);
boolean equals(Object o);
int hashCode();
AbstractMap
其定义如下:
public abstract class AbstractMap<K,V> implements Map<K,V>
AbstractMap
提供了Map的大部分实现,要实现不可修改的映射,只需扩展此类并提供 entrySet()
方法的实现即可。要实现可修改的映射,编程人员必须另外重写此类的 put
方法(否则将抛出 UnsupportedOperationException
),entrySet().iterator()
返回的迭代器也必须另外实现其 remove
方法。
AbstractMap API
abstract Set<Entry<K, V>> entrySet()
void clear()
boolean containsKey(Object key)
boolean containsValue(Object value)
boolean equals(Object o)
V get(Object key)
int hashCode()
boolean isEmpty()
Set<K> keySet()
V put(K key, V value)
void putAll(Map<? extends K, ? extends V> m)
V remove(Object key)
int size()
String toString()
Collection<V> values()
Object clone()
SortedMap
其定义如下:
public interface SortedMap<K,V> extends Map<K,V>
SortedMap
是一个有序的键值映射,排序方式有两种:自然排序和指定Comparator
。
SortedMap API
Comparator<? super K> comparator()
K firstKey()
SortedMap<K, V> headMap(K endKey)
K lastKey()
SortedMap<K, V> subMap(K startKey, K endKey)
SortedMap<K, V> tailMap(K startKey)
Set<K> keySet();
Collection<V> values();
Set<Map.Entry<K, V>> entrySet();
NavigableMap
其定义如下:
public interface NavigableMap<K,V> extends SortedMap<K,V>
NavigableMap
是继承于SortedMap
的接口,具有了针对给定搜索目标返回最接近匹配项的导航方法。
NavigableMap API
Entry<K, V> ceilingEntry(K key)
Entry<K, V> firstEntry()
Entry<K, V> floorEntry(K key)
Entry<K, V> higherEntry(K key)
Entry<K, V> lastEntry()
Entry<K, V> lowerEntry(K key)
Entry<K, V> pollFirstEntry()
Entry<K, V> pollLastEntry()
K ceilingKey(K key)
K floorKey(K key)
K higherKey(K key)
K lowerKey(K key)
NavigableSet<K> descendingKeySet()
NavigableSet<K> navigableKeySet()
NavigableMap<K, V> descendingMap()
NavigableMap<K, V> headMap(K toKey, boolean inclusive)
SortedMap<K, V> headMap(K toKey)
SortedMap<K, V> subMap(K fromKey, K toKey)
NavigableMap<K, V> subMap(K fromKey, boolean fromInclusive, boolean toInclusive)
SortedMap<K, V> tailMap(K fromKey)
NavigableMap<K, V> tailMap(K fromKey, boolean inclusive)
-
lowerEntry
、floorEntry
、ceilingEntry
和higherEntry
分别返回与小于、小于等于、大于等于、大于给定键的键关联的Map.Entry
对象,如果不存在这样的键,则返回null
-
firstEntry、pollFirstEntry、lastEntry 和 pollLastEntry
方法,它们返回和/或移除最小和最大的映射关系(如果存在),否则返回 null。 -
lowerKey、floorKey、ceilingKey 和 higherKey
分别返回与小于、小于等于、大于等于、大于给定键的键 -
navigableKeySet、descendingKeySet
分别获取正序/反序的键集,descendingMap()
返回此映射中所包含映射关系的逆序视图 -
headMap、subMap、tailMap
返回特定的键-值对的子集
Dictionary
其定义如下:
public abstract class Dictionary<K,V>
NavigableMap
是JDK 1.0
定义的键值对的接口,它也包括了操作键值对的基本函数。
Dictionary API
Enumeration<V> elements()
V get(Object key)
boolean isEmpty()
Enumeration<K> keys()
V put(K key, V value)
V remove(Object key)
int size()
网友评论