Java集合包(五)——Map接口及其子接口、抽象类
转载请注明原文地址: https://www.cnblogs.com/ygj0930/p/13565258.html
一:宏观架构
拆解记忆如下:
1、接口:Map接口是顶层接口,存储的内容是键值对,定义了一系列映射的操作方法规范;
SortedMap 继承于Map的接口,在顶层Map接口的接触上,增加了排序属性,存储的是排序的键值对,通过比较器(Comparator)来定义排序方法;
NavigableMap 继承SortedMap的接口,基于SortedMap的排序键值对,提供了一系列条件查询方法,例如"获取大于/等于某对象的键值对"、“获取小于/等于某对象的键值对”等等;
2、抽象类:AbstractMap 抽象类实现了Map接口,它实现了Map中的大部分API;
Dictionary 抽象类是老版本中定义的另一套键值对规范,与Map接口独立,已过时。
3、实现类:HashMap 继承AbstractMap,基于AbstractMap已实现的方法基础上,还定义了一些其他方法;【其键值对是无序的】
TreeMap 继承AbstractMap的同时还实现了NavigableMap的接口,因此具备了排序的属性,也额外具备了一系列条件查询方法;
WeakHashMap 继承AbstractMap,它于HashMap的不同在于:它的键类型不同,WeakHashMap的键是“弱键”,它的key所映射的value可以被GC回收,此时键值对会被自动删除。
HashTable没有继承AbstractMap,它继承Dictionary抽象类来保存键值对,同时它又实现了Map接口,按照Map接口的规范去实现了统一的键值对操作方法,它与HashMap不同的时,它是线程安全的,现已过时。转用ConcurrentHashMap。
二:Map接口
Map接口是映射的顶层接口,对映射进行了高度抽象,并且定义了一系列通用的操作方法规范。
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 是一个键值对(key-value)映射接口。Map映射中不能包含重复的键;每个键最多只能映射到一个值。
2)Map 接口提供了三种数据视图,允许以 键集、值集或键-值映集 的形式查看某个映射的内容。
entrySet()用于返回键-值集的Set集合
keySet()用于返回键集的Set集合
values()用户返回值集的Collection集合
Map接口中还定义了一个内部接口 Entry<K,V> ,它定义了键值对的一系列操作规范方法:
abstract boolean equals(Object object) abstract K getKey() abstract V getValue() abstract int hashCode() abstract V setValue(V object)
二:SortedMap接口
SortedMap接口继承于Map接口,增加了键值对的排序属性。
SortedMap的排序方式有两种:自然排序 或者 用户指定比较器排序。
凡是插入有序 SortedMap 的所有元素都必须先实现 Comparable 接口,并实现比较方法。
// 继承于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接口继承于SortedMap接口,目的是为了基于SortedMap的有序键值对提供针对特定搜索目标的导航方法。
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)
第1类,查找特定 键-值对的方法。
lowerEntry、floorEntry、ceilingEntry 和 higherEntry 方法,它们分别返回与小于、小于等于、大于等于、大于给定键的键关联的 Map.Entry 对象。
firstEntry、pollFirstEntry、lastEntry 和 pollLastEntry 方法,它们返回和/或移除最小和最大的映射关系(如果存在),否则返回 null。
第2类,查找特定 键的方法。
lowerKey、floorKey、ceilingKey 和 higherKey 方法,它们分别返回与小于、小于等于、大于等于、大于给定键的键。
第3类,查找特定 键集的方法。
navigableKeySet、descendingKeySet分别获取正序/反序的键集。
第4类,获取键-值对的子集。
四:AbstractMap抽象类
public abstract class AbstractMap<K,V> implements Map<K,V> {}
AbstractMap实现了Map接口,并定义了接口中的大部分通用方法,减少了后续实现类的编码工作。
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()
五:Dictionary抽象类
public abstract class Dictionary<K,V> {}
它是旧版本中定义的键值对抽象类,独立于Map接口,也定义了一系列键值对操作函数规范,目前已过时。
abstract Enumeration<V> elements() abstract V get(Object key) abstract boolean isEmpty() abstract Enumeration<K> keys() abstract V put(K key, V value) abstract V remove(Object key) abstract int size()
它的主要实现类只有HashTable,也已过时。