摘要

前面我们学习了list的相关知识,接下来来学习下Map的相关知识。我们将从以下几个方面进行阐述

  1. Map集合的相关类图
  2. Map的简介
  3. AbstractMap的简介
  4. SortedMap的简介
  5. NavigableMap的简介

Map集合的相关类图

Java 集合框架06---Map的架构_java
总结:
1. Map是一个映射接口,Map的存储内容是键值对
2. ​​​AbstractMap​​​ 实现了Map 接口中除了entrySet方法之外的大部分API。
3. ​​​SortedMap​​​是继承于Map的接口,​​SortedMap​​​的内容是排序的键值对。排序的方法是通过比较器
4. ​​​NavigableMap​​​是继承于​​SortedMap​​​的接口,与​​SortedMap​​​相比,​​NavigableMap​​​多了一系列导航的方法,如获取“大于/等于某对象的键值对”,“小于/等于某对象的键值对”
5. ​​​TreeMap​​​继承于​​AbstractMap​​​,且实现了​​NavigableMap​​​,所以​​TreeMap​​​可以保证是有序键值对。
6. ​​​HashMap​​​ 继承于​​AbstractMap​​​,但没实现​​NavigableMap​​​, 所以​​HashMap​​的内容是“键值对,但不保证次序”

Map的简介

Map的定义

public interface Map<K,V>{}
  1. Map 是一个键值对的映射结构,Map 中键不可以重复,值可以重复,一个键最多映射一个值
  2. Map 提供了三种​​Collection​​视图,允许以键集,值集和键-值映射关系集的形式来查看某个映射内容。
  3. Map的映射顺序,有些实现类保证了顺序,如​​TreeMap​​​,有些实现类则没有保证顺序,如​​HashMap​​。
  4. Map的实现类应该提供两种构造器,一种是无参构造器,此构造器用于创建空映射,另一种是带一个Map参数的构造器,此构造器用于创建同该map等大小的映射。

Map的API

abstract void                 clear()
abstract boolean containsKey(Object key)
abstract boolean containsValue(Object value)
abstract Set<Entry<K, V>> entrySet()
abstract boolean equals(Object object)
abstract V get(Object key)
abstract int hashCode()
abstract boolean isEmpty()
abstract Set<K> keySet()
abstract V put(K key, V value)
abstract void putAll(Map<? extends K, ? extends V> map)
abstract V remove(Object key)
abstract int size()
abstract Collection<V> values()

简要说明
1. Map接口分别提供了
entrySet() 返回键-值对关系集
keySet() 返回键集
values() 返回值集
2. Map 接口提供了一系列操作Map的方法,包括添加,移除元素等。

AbstractMap的简介

AbstractMap 的定义

public abstract class AbstractMap<K,V> implements Map<K,V> {}

说明:
1. ​​​AbstractMap​​​ 是一个实现了Map接口的抽象类,故其不能被实例化,只能作为其他实现类的父类
2. ​​​AbstractMap​​​ 实现了​​Map​​​接口中的大部分方法。
3. 要实现不可修改的映射,开发人员只需扩展此类并提供​​​entrySet​​​方法的实现即可,该方法将返回映射关系set 视图,通常,返回的set将依次在​​AbstractSet​​​上实现。此set不支持add()或者remove()方法,其迭代器也不支持remove() 方法。
4. 要实现可修改的映射,开发人员必须另外重写此类的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 object)
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()
String toString()
Collection<V> values()
Object clone()

SortedMap的简介

SortedMap的定义如下:

public interface SortedMap<K,V> extends Map<K,V> { }
  1. SortedMap是一个继承于Map接口的接口。它是一个有序的SortedMap键值映射。SortedMap的排序方式有两种:自然排序或者用户指定比较器。插入有序SortedMap的所有元素都必须实现Comparable接口(或者被指定的比较器所接受)。
    另外,所有​​​SortedMap​​实现类都应该提供4个“标准”构造方法。
  2. void (无参) 构造器,它创建一个空的有序映射,按照键的自然顺序进行排序。
  3. 带有一个Comparator类型参数的构造器,它将创建一个空的有序映射,根据指定的比较器进行排序。
  4. 带有一个Map类型参数的构造器,它将创建一个新的有序映射,其键-值映射关系与参数相同,按照键的自然顺序进行排序。
  5. 带有一个SortedMap类型参数的构造器,它创建一个新的有序映射,其键-值映射关系和排序方法与输入的有序映射相同。无法保证强制实施此建议,因为接口不能包含构造方法。

SortedMap的API

// 继承于Map的API
abstract void clear()
abstract boolean containsKey(Object key)
abstract boolean containsValue(Object value)
abstract Set<Entry<K, V>> entrySet()
abstract boolean equals(Object object)
abstract V get(Object key)
abstract int hashCode()
abstract boolean isEmpty()
abstract Set<K> keySet()
abstract V put(K key, V value)
abstract void putAll(Map<? extends K, ? extends V> map)
abstract V remove(Object key)
abstract int size()
abstract Collection<V> values()
// SortedMap新增的API
abstract Comparator<? super K> comparator()
abstract K firstKey()
abstract SortedMap<K, V> headMap(K endKey)
abstract K lastKey()
abstract SortedMap<K, V> subMap(K startKey, K endKey)
abstract SortedMap<K, V> tailMap(K startKey)

NavigableMap的简介

NavigableMap的定义

public interface NavigableMap<K,V> extends SortedMap<K,V> { }

​NavigableMap​​​是一个继承于​​SortedMap​​​的接口。它是一个可导航的键-值对集合。具有了为给定搜索目标报告最接近匹配项的导航方法。
​​​NavigableMap​​分别提供了获取“键”,“键-值对”,“键集”,“键-值对集”的相关方法。

NavigableMap的API

abstract Entry<K, V>             ceilingEntry(K key)
abstract Entry<K, V> firstEntry()
abstract Entry<K, V> floorEntry(K key)
abstract Entry<K, V> higherEntry(K key)
abstract Entry<K, V> lastEntry()
abstract Entry<K, V> lowerEntry(K key)
abstract Entry<K, V> pollFirstEntry()
abstract Entry<K, V> pollLastEntry()
abstract K ceilingKey(K key)
abstract K floorKey(K key)
abstract K higherKey(K key)
abstract K lowerKey(K key)
abstract NavigableSet<K> descendingKeySet()
abstract NavigableSet<K> navigableKeySet()
abstract NavigableMap<K, V> descendingMap()
abstract NavigableMap<K, V> headMap(K toKey, boolean inclusive)
abstract SortedMap<K, V> headMap(K toKey)
abstract SortedMap<K, V> subMap(K fromKey, K toKey)
abstract NavigableMap<K, V> subMap(K fromKey, boolean fromInclusive, K toKey, boolean toInclusive)
abstract SortedMap<K, V> tailMap(K fromKey)
abstract NavigableMap<K, V> tailMap(K fromKey, boolean inclusive)

说明:
​​​NavigableMap​​​除了继承SortedMap的特性外,它提供的功能可以分为4类:
第1类,提供操作键-值对的方法。
lowerEntry、floorEntry、ceilingEntry和higherEntry方法,它们分别返回与小于,小于等于、大于等于、大于给定键的键关联的Map.Entry对象。
firstEntry、pollFirstEntry、lastEntry和pollLastEntry方法,它们返回和/或移除最小和最大的映射关系(如果存在),否则返回null。
第2类,提供操作键的方法。这个和第1类比较类似
lowerKey、floorKey、ceilingKey和higherKey方法,它们分别返回与小于、小于等于、大于等于、大于给定键的键。
第3类,获取键集
navigableKeySet、descendingKeySet分别获取正序/反序的键集。
第4类,获取键-值对的子集

引用