首页 - 技巧 - Java宝典系列09 地图架构

Java宝典系列09 地图架构

2023-10-07 11:24

总结

之前我们系统地学习过List。接下来我们先学习Map,然后学习Set;因为Set的实现类都是基于Map实现的(比如HashSet是通过HashMap实现的,TreeSet是通过TreeMap实现的)。

首先,我们来看看Map架构。

如上图:
(01)地图为映射接口。 Map中存储的内容为键值对(key-value)
(02) AbstractMap是继承自Map的抽象类。它实现了 Map 中的大部分 API 。其他Map实现类可以通过继承AbstractMap来减少重复编码。
(03)SortedMap是继承自Map的接口。 SortedMap中的内容是按排序的键值对。排序的方法是通过比较器(Comparator)。
(04) NavigableMap 是继承自 SortedMap 的接口。与SortedMap相比,NavigableMap拥有一系列的导航方式;比如“获取大于/等于某个对象的键值对”、“获取小于/等于某个对象的键值对”等。
(05)TreeMap继承于AbstractMap,并实现NavigableMap接口;因此,TreeMap 中的内容是“有序键值对”!
(06)HashMap继承于AbstractMap,但没有实现NavigableMap接口;因此,HashMap的内容是“键值对,但不保证顺序”!
(07) Hashtable虽然没有继承于AbstractMap,但它确实继承于Dictionary(Dictionary也是键值对的接口),并且也实现了Map接口;因此,Hashtable 的内容也是“键值对,也不是保证顺序”。但与 HashMap 相比,Hashtable 是线程安全的,并且支持通过 Enumeration 进行遍历。
(08) WeakHashMap继承自AbstractMap,与HashMap的key类型不同,WeakHashMap的key是“弱key”

在详细介绍各个实现类之前,首先来看看对各个接口和抽象类的总体介绍。 内容包括:
1 地图
2 Map.Entry
3 AbstractMap
4 SortedMap
5 NavigableMap
6 Dictionary

转载请注明出处:http://www.genealogy-computer-tips.com/skywang12345/p/3308931.html

1 地图

地图定义如下:

公共接口地图 { }

Map 是一个键值映射接口。 Map不能包含重复的key;每个键最多只能映射到一个值
Map 接口提供了三种集合视图,允许 键集值集 键值映射 以集合的形式查看映射径向关系内容。
地图映射顺序。有些实现类可以显式保证它们的顺序,例如TreeMap;其他映射实现不保证顺序,例如 HashMap 类。
Map 的实现类应提供 2 个“标准”构造函数: 第一个,void(无参数)构造函数,用于创建空地图 第二种,有一个带有单个Map类型参数的构造函数,它创建一个新的map,其键值映射与其参数相同。 事实上,后一个构造函数允许用户复制任何映射,生成所需类的等效映射。尽管无法强制执行此建议(因为接口不能包含构造函数),但 JDK 中的所有常见映射实现都遵守它。


地图API

抽象 void clear()
抽象布尔值 containsKey(对象键)
抽象布尔值 containsValue(对象值)
抽象集>entrySet()
抽象布尔等于(对象对象)
抽象 V get(对象键)
抽象 int hashCode()抽象布尔值 isEmpty()
抽象 Set keySet()
抽象V put(K键,V值)
Abstract void putAll(Map 地图)
抽象 V 删除(对象键)
抽象 int 大小()
抽象集合values()

描述
(01) Map 提供分别返回键集、值集或键值映射关系集的接口。 E EntrySet()用于返回Set()的Set(),该Set()返回键值集。 (Values() 用户返回

集合集合


只能最大化为一个值,因此, 键值集和键集为 Set,值集为 Collection

(02)Map提供了“键值对”、“根据key获取值”、“删除key”、“获取容量大小”等方法。

2 地图.条目

Map.Entry 定义如下:

接口入口 { }

Map.Entry 是Map 中的内部接口。 Map.Entry 是 键值对 。 Map通过entrySet()获取Map.Entry的键值对集合,从而通过这个集合实现键匹配。对值对的操作。

Map.Entry API

抽象布尔等于(对象对象)抽象 K getKey()
抽象 V getValue()
抽象 int hashCode()
抽象 V setValue(V 对象)

3 抽象地图

AbstractMap 定义如下:

公共抽象类 AbstractMap 实现 Map {}

AbstractMap 类提供了 Map 接口的骨干实现,以最大限度地减少实现此接口所需的工作。
要实现不可修改的映射,程序员只需扩展此类并提供 EntrySet 方法的实现,该方法返回映射的集合视图。通常,返回的集合将依次在 AbstractSet 上实现。该集合不支持add()或remove()方法,其迭代器也不支持remove()方法。

要实现可修改的映射,程序员必须另外重写该类的 put 方法(否则将抛出 UnsupportedOperationException),并且 EntrySet().iterator() 返回的迭代器必须另外实现其 remove 方法。

AbstractMap API

抽象集>entrySet()
         无效清除()
         布尔值 containsKey(对象键)
         布尔包含值(对象值)
         布尔值等于(对象对象)
         V get(对象键)int 哈希码()
         布尔值 isEmpty()
         设置 keySet()
         V put(K键,V值)
         void putAll(地图地图)
         V 删除(对象键)
         整数大小()
         字符串转字符串()
         集合values()
         对象克隆()

4 排序地图

SortedMap 定义如下:

公共接口 SortedMap 扩展了 Map { }

SortedMap 是继承自 Map 接口的接口。它是一个有序的 SortedMap 键值映射。对
SortedMap 进行排序有两种方法:自然排序用户指定的比较器。插入排序的 SortedMap 中的所有元素都必须实现 Comparable 接口(或被指定的比较器接受)。

此外,所有SortedMap实现类都应该提供4个“标准”构造函数:
(01) void(无参数)构造函数,它创建一个空的排序映射,根据键进行排序按照它们的自然顺序。
(02) 构造方法采用 Comparator 类型参数,该方法创建一个空的有序映射,根据指定的比较器进行排序。
(03) 带Map类型参数的构造方法,该方法会创建一个新的有序映射,该映射与参数具有相同的键值映射关系,并按照键的自然顺序排序。
(04) 带有 SortedMap 类型参数的构造方法 ,该方法创建一个新的排序映射,其键值映射和排序方法与输入排序映射相同。无法保证此建议将得到执行,因为接口不能包含构造函数。

SortedMap API

//继承自Map的API
抽象无效明确()
抽象布尔值 containsKey(对象键)
抽象布尔值 containsValue(对象值)
抽象集>entrySet()
抽象布尔等于(对象对象)
抽象 V get(对象键)
抽象 int hashCode()
抽象布尔值 isEmpty()
抽象 Set keySet()
抽象V put(K键,V值)
Abstract void putAll(Map 地图)抽象 V 删除(对象键)
抽象 int 大小()
抽象集合values()
// SortedMap 的新 API
抽象比较器比较器()
抽象 K firstKey()
抽象 SortedMap headMap(K endKey)
抽象 K lastKey()
抽象 SortedMap subMap(K startKey, K endKey)
摘要 SortedMap tailMap(K startKey)

5 导航地图

NavigableMap 定义如下:

公共接口 NavigableMap 扩展了 SortedMap { }

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

NavigableMap API

抽象条目天花板条目(K键)
抽象条目firstEntry()
摘要Entry FloorEntry(K键)抽象条目 更高条目(K键)
抽象条目lastEntry()
摘要Entry lowerEntry(K键)
抽象条目 pollFirstEntry()
抽象条目 pollLastEntry()
抽象K天花板钥匙(K key)
抽象K楼层Key(K key)
抽象K upperKey(K key)
抽象 K lowerKey(K 键)
抽象 NavigableSet DescendingKeySet()
抽象 NavigableSet navigableKeySet()
抽象 NavigableMap DescendingMap()
抽象 NavigableMap headMap(K toKey,包含布尔值)
抽象 SortedMap headMap(K toKey)
抽象 SortedMap subMap(K fromKey, K toKey)
抽象 NavigableMap subMap(K fromKey, boolean fromInclusive, K toKey, boolean toInclusive)
抽象 SortedMap tailMap(K fromKey)Abstract NavigableMap tailMap(K fromKey, 包含布尔值)

说明

除了继承SortedMap的特性外,

NavigableMap提供的功能可分为4类:
第1类,提供操作键值对的方法。 R LOWEERENTRY、Floorentry、CEILINGENTRY 和 Higherentry 方法分别返回小于、小于等于、大于等于和大于给定键的 MAP.ENTRY 对象。
                                                                                                                                                                      第一个条目、pollFirstEntry、lastEntry 和 pollLastEntry 方法,返回和/或删除最小和最大映射关系(如果存在),否则返回 null。
类别2,提供操作键的方法。这与 LOWERKEY、FloorKey、CeilingKey 和 Higherkey 方法类似。它们分别返回小于、小于等于、大于等于、大于给定键的键。
类别 3, 获取密钥集。
        navigableKeySet和descendingKeySet分别获取正序/倒序键集。
类别4,获取键值对的子集。

6词典

词典定义如下:

公共抽象类Dictionary {}

NavigableMap 是 JDK 1.0 定义的键值对接口。它还包括操作键值对的基本功能。


字典API

抽象枚举 elements()
抽象 V get(对象键)
抽象布尔值 isEmpty()抽象枚举keys()
抽象V put(K键,V值)
抽象 V 删除(对象键)
抽象 int size()