Java荟萃进修(九) Map架构
当前位置:以往代写 > JAVA 教程 >Java荟萃进修(九) Map架构
2019-06-14

Java荟萃进修(九) Map架构

副标题#e#

前面,我们已经系统的对List举办了进修。接下来,我们先进修Map,再进修Set;因为Set的实现类都是基于Map来实现的(如,HashSet是通过HashMap实现的,TreeSet是通过TreeMap实现的)。

首先,我们看看Map架构。

如上图:
Map 是映射接口,Map中存储的内容是键值对(key-value)。
AbstractMap 是担任于Map的抽象类,它实现了Map中的大部门API。其它Map的实现类可以通过担任AbstractMap来淘汰反复编码。
SortedMap 是担任于Map的接口。SortedMap中的内容是排序的键值对,排序的要领是通过较量器(Comparator)。
NavigableMap 是担任于SortedMap的接口。对比于SortedMap,NavigableMap有一系列的导航要领;如"获取大于/便是某工具的键值对"、“获取小于/便是某工具的键值对”等等。
TreeMap 担任于AbstractMap,且实现了NavigableMap接口;因此,TreeMap中的内容是“有序的键值对”!
HashMap 担任于AbstractMap,但没实现NavigableMap接口;因此,HashMap的内容是“键值对,但不担保序次”!
Hashtable 固然不是担任于AbstractMap,但它担任于Dictionary(Dictionary也是键值对的接口),并且也实现Map接口;因此,Hashtable的内容也是“键值对,也不担保序次”。但和HashMap对比,Hashtable是线程安详的,并且它支持通过Enumeration去遍历。
WeakHashMap 担任于AbstractMap。它和HashMap的键范例差异,WeakHashMap的键是“弱键”。

有了上面的总体框架之后,我们先来看看各个接口和抽象类的先容;后头再对各个实现类举办具体说明。

1 Map

Map的界说如下:

public interface Map<K,V> { }
Map 是一个键值对(key-value)映射接口。Map映射中不能包括反复的键;每个键最多只能映射到一个值。
Map 接口提供三种collection 视图,答允以键集、值集或键-值映射干系集的形式查察某个映射的内容。
Map 映射顺序。有些实现类,可以明晰担保其顺序,如 TreeMap;另一些映射实现则不担保顺序,如 HashMap 类。
Map 的实现类应该提供2个“尺度的”结构要领:第一个,void(无参数)结构要领,用于建设空映射;第二个,带有单个 Map 范例参数的结构要领,用于建设一个与其参数具有沟通键-值映射干系的新映射。实际上,后一个结构要领答允用户复制任意映射,生成所需类的一个等价映射。尽量无法强制执行此发起(因为接口不能包括结构要领),可是 JDK 中所有通用的映射实现都遵从它。

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()

说明:
(01) Map提供接口别离用于返回 键集、值集或键-值映射干系集。
       entrySet()用于返回键-值集的Set荟萃
       keySet()用于返回键集的Set荟萃
      values()用户返回值集的Collection荟萃
      因为Map中不能包括反复的键;每个键最多只能映射到一个值。所以,键-值集、键集都是Set,值集时Collection。

(02) Map提供了“键-值对”、“按照键获取值”、“删除键”、“获取容量巨细”等要领。

2 Map.Entry

Map.Entry的界说如下:

interface Entry<K,V> { }

Map.Entry是Map中内部的一个接口,Map.Entry是键值对,Map通过 entrySet() 获取Map.Entry的键值对荟萃,从而通过该荟萃实现对键值对的操纵。

Map.Entry的API

abstract boolean     equals(Object object)
abstract K             getKey()
abstract V             getValue()
abstract int         hashCode()
abstract V             setValue(V object)

3 AbstractMap

AbstractMap的界说如下:

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

AbstractMap类提供 Map 接口的主干实现,以最大限度地淘汰实现此接口所需的事情。
要实现不行修改的映射,编程人员只需扩展此类并提供 entrySet 要领的实现即可,该要领将返回映射的映射干系 set 视图。凡是,返回的 set 将依次在 AbstractSet 上实现。此 set 不支持 add() 或 remove() 要领,其迭代器也不支持 remove() 要领。

#p#分页标题#e#

要实现可修改的映射,编程人员必需别的重写此类的 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()

4 SortedMap

SortedMap的界说如下:

public interface SortedMap<K,V> extends Map<K,V> { }
SortedMap是一个担任于Map接口的接口。它是一个有序的SortedMap键值映射。
SortedMap的排序方法有两种:自然排序 可能 用户指定较量器。 插入有序 SortedMap 的所有元素都必需实现 Comparable 接口(可能被指定的较量器所接管)。

别的,所有SortedMap 实现类都应该提供 4 个“尺度”结构要领:
(01) void(无参数)结构要领,它建设一个空的有序映射,凭据键的自然顺序举办排序。
(02) 带有一个 Comparator 范例参数的结构要领,它建设一个空的有序映射,按照指定的较量器举办排序。
(03) 带有一个 Map 范例参数的结构要领,它建设一个新的有序映射,其键-值映射干系与参数沟通,凭据键的自然顺序举办排序。
(04) 带有一个 SortedMap 范例参数的结构要领,它建设一个新的有序映射,其键-值映射干系和排序要领与输入的有序映射沟通。无法担保强制实施此发起,因为接口不能包括结构要领。

查察本栏目


#p#副标题#e#

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)

5 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)

说明:

#p#分页标题#e#

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类,获取键-值对的子集。

6 Dictionary

Dictionary的界说如下:

public abstract class Dictionary<K,V> {}

NavigableMap是JDK 1.0界说的键值对的接口,它也包罗了操纵键值对的根基函数。
Dictionary的API

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()

    关键字:

在线提交作业