Java集合包(五)——Map接口及其子接口、抽象类

Java集合包(五)——Map接口及其子接口、抽象类

转载请注明原文地址: https://www.cnblogs.com/ygj0930/p/13565258.html

一:宏观架构

Java集合包(五)——Map接口及其子接口、抽象类

  拆解记忆如下:

  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,也已过时。