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

      

  • 相关阅读:
    git初学
    Android中activity的四个启动模式
    onsaveInstanceState有关问题
    default activity not found的问题
    实现随手指移动
    入园第一天
    玩转Django2.0---Django笔记建站基础八(admin后台系统)
    玩转Django2.0---Django笔记建站基础七(表单与模型)
    玩转Django2.0---Django笔记建站基础六(模型与数据库)
    玩转Django2.0---Django笔记建站基础五(模板)
  • 原文地址:https://www.cnblogs.com/ygj0930/p/13565258.html
Copyright © 2020-2023  润新知