Map接口与抽象类

一.Map部分结构图

image.png

二.Map接口

image.png

三.AbstractMap抽象类

  • 供子类实现的方法:put,entrySet
  • Map的增删改查都是通过获取Iterator<Entry<K,V>> i = entrySet().iterator()遍历实现的,以查询为例
  public V get(Object key) {
        Iterator<Entry<K,V>> i = entrySet().iterator();
        if (key==null) {
            while (i.hasNext()) {
                Entry<K,V> e = i.next();
                if (e.getKey()==null)
                    return e.getValue();
            }
        } else {
            while (i.hasNext()) {
                Entry<K,V> e = i.next();
                if (key.equals(e.getKey()))
                    return e.getValue();
            }
        }
        return null;
    }

  • keySet()与values()
    • keySet()是new 一个实现了迭代器的AbstractSet<K>()返回,values()是 new一个实现迭代器的AbstractCollection<V>()返回,因而可以使用迭代器遍历map元素。
    • 由于key和value存储方式只实现各个线程内存的可见性(volatile),但无法保证原子性。
transient volatile Set<K>        keySet = null;
transient volatile Collection<V> values = null;
 public Collection<V> values() {
        if (values == null) {
            values = new AbstractCollection<V>() {
                public Iterator<V> iterator() {
                    return new Iterator<V>() {
                        private Iterator<Entry<K,V>> i = entrySet().iterator();
                        public boolean hasNext() {
                            return i.hasNext();
                        }
                        public V next() {
                            return i.next().getValue();
                        }
                        public void remove() {
                            i.remove();
                        }
            };
        }
        return values;
    }

四.SortedMap接口

  • 相交Map附加方法:
  • 进一步提供关于键的总体排序Map。该映射是根据其键的自然顺序进行排序的,或者根据在创建有序映射时提供的 Comparator 进行排序。对有序映射的 collection 视图(由 entrySet、keySet和 values 方法返回)进行迭代时,此顺序就会反映出来。要采用此排序方式,还需要提供一些其他操作(此接口是 SortedSet 的对应映射)。
    image.png

五.NavigableMap接口

  • 扩展的 SortedMap,具有了针对给定搜索目标返回最接近匹配项的导航方法。方法 lowerEntry、floorEntry、ceilingEntry 和 higherEntry 分别返回与小于、小于等于、大于等于、大于给定键的键关联的 Map.Entry 对象,如果不存在这样的键,则返回 null。类似地,方法 lowerKey、floorKey、ceilingKey和 higherKey只返回关联的键。所有这些方法是为查找条目而不是遍历条目而设计的
  • 此接口还定义了 firstEntry、pollFirstEntry、lastEntry 和 pollLastEntry 方法,它们返回和/或移除最小和最大的映射关系(如果存在),否则返回 null


    image.png

六.ConcurrentMap

  • 提供其他原子 putIfAbsent、remove、replace方法的 Map
    image.png

七·.ConcurrentNavigableMap( extends ConcurrentMap<K,V>, NavigableMap<K,V>)

  • 供其他原子 putIfAbsent、remove、replace方法的 Map;支持 NavigableMap 操作,且以递归方式支持其可导航子映射的 ConcurrentMap
    image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一 Set List Map的定义 1. 什么是set Set的功能方法 Set具有与Collection完全一样...
    史慧君阅读 4,048评论 1 49
  • Java集合框架 Java平台提供了一个全新的集合框架。“集合框架”主要由一组用来操作对象的接口组成。不同接口描述...
    小石38阅读 371评论 0 0
  • java笔记第一天 == 和 equals ==比较的比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量...
    jmychou阅读 1,518评论 0 3
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,767评论 18 399
  • 集合类的相关总结(一)集合类的相关总结(二) Map<K,V> 特点: 以键值对的形式存储数据 键的值是唯一的,不...
    MLLWF阅读 182评论 0 0