Module  java.base
软件包  java.util

Class AbstractMap<K,V>

  • 参数类型
    K - 由该地图维护的键的类型
    V - 映射值的类型
    All Implemented Interfaces:
    Map<K,V>
    已知直接子类:
    ConcurrentHashMapConcurrentSkipListMapEnumMapHashMapIdentityHashMapTreeMapWeakHashMap


    public abstract class AbstractMap<K,V>
    extends Object
    implements Map<K,V>
    该类提供了Map接口的骨架实现,以尽量减少实现此接口所需的工作量。

    为了实现一个不可修改的地图,程序员只需要扩展这个类,并为entrySet方法提供一个实现,该方法返回地图映射的设置视图。 通常,返回的集合将反过来实现在AbstractSet 这个集合不应该支持add或者remove方法,而且它的迭代器不应该支持remove方法。

    要实现可修改的映射,程序员必须另外覆盖此类的put方法(否则将抛出一个UnsupportedOperationException ),由entrySet().iterator()返回的迭代器必须另外实现其remove方法。

    根据Map接口规范中的建议,程序员通常应该提供一个void(无参数)和map构造函数。

    该类中每个非抽象方法的文档详细描述了其实现。 如果实施的地图承认更有效的实施,则可以覆盖这些方法中的每一个。

    这个类是Java Collections Framework的成员。

    从以下版本开始:
    1.2
    另请参见:
    MapCollection
    • 构造方法详细信息

      • AbstractMap

        protected AbstractMap​()
        唯一的构造函数。 (用于子类构造函数的调用,通常是隐式的。)
    • 方法详细信息

      • size

        public int size​()
        返回此地图中键值映射的数量。 如果地图包含Integer.MAX_VALUE元素,返回Integer.MAX_VALUE
        Specified by:
        size在接口 Map<K,V>
        实现要求:
        此实现返回 entrySet().size()
        结果
        该地图中键值映射的数量
      • isEmpty

        public boolean isEmpty​()
        如果此映射不包含键值映射,则返回 true
        Specified by:
        isEmpty在接口 Map<K,V>
        实现要求:
        此实现返回 size() == 0
        结果
        true如果该地图不包含键值映射
      • containsValue

        public boolean containsValue​(Object value)
        如果此映射将一个或多个键映射到指定的值,则返回true 更正式地,返回true如果且仅当此映射包含至少一个映射到值v ,使得Objects.equals(value, v) 对于Map接口的大多数实现,此操作可能需要在地图大小的时间线性。
        Specified by:
        containsValue在接口 Map<K,V>
        实现要求:
        该实现迭代超过entrySet()搜索具有指定值的条目。 如果找到这样的条目,则返回true 如果迭代结束而没有找到这样的条目,则返回false 请注意,此实现需要在地图大小上具有线性时间。
        参数
        value - 要在此地图中存在的值要进行测试
        结果
        true如果该地图将一个或多个键映射到指定的值
        异常
        ClassCastException - 如果该值对于该地图是不合适的类型( optional
        NullPointerException - 如果指定的值为空,并且该映射不允许空值( optional
      • containsKey

        public boolean containsKey​(Object key)
        如果此映射包含指定键的映射,则返回true 更正式地说,返回true当且仅当此映射包含一个键的映射关系k这样Objects.equals(key, k) (最多可以有一个这样的映射。)
        Specified by:
        containsKey在接口 Map<K,V>
        实现要求:
        该实现遍历entrySet()搜索具有指定键的条目。 如果找到这样的条目,则返回true 如果迭代结束而没有找到这样的条目,则返回false 请注意,此实现需要在地图大小上具有线性时间; 许多实现将覆盖此方法。
        参数
        key - 要在此地图中存在的密钥要进行测试
        结果
        true如果此映射包含指定键的映射
        异常
        ClassCastException - 如果密钥是该地图不合适的类型( optional
        NullPointerException - 如果指定的键为空,并且该映射不允许空键( optional
      • get

        public V get​(Object key)
        返回指定键映射到的值,如果此映射不包含该键的映射,则返回null

        更正式地,如果此映射包含从密钥映射k到值v使得Objects.equals(key, k) ,则此方法返回v ; 否则返回null (最多可以有一个这样的映射。)

        如果此映射允许空值,则返回值null 不一定表示映射不包含该键的映射; 地图也可能将密钥明确地映射到null 可以使用containsKey操作来区分这两种情况。

        Specified by:
        get在接口 Map<K,V>
        实现要求:
        该实现遍历entrySet()搜索具有指定键的条目。 如果找到这样的条目,则返回条目的值。 如果迭代结束而没有找到这样的条目,则返回null 请注意,此实现需要在地图大小上具有线性时间; 许多实现将覆盖此方法。
        参数
        key - 要返回其关联值的键
        结果
        指定键映射到的值,如果此映射不包含键的映射, null
        异常
        ClassCastException - 如果密钥对于此地图是不合适的类型( optional
        NullPointerException - 如果指定的键为空,并且此映射不允许空键( optional
      • put

        public V put​(K key,
                     V value)
        将指定的值与该映射中的指定键相关联(可选操作)。 如果映射先前包含了密钥的映射,则旧值将被指定的值替换。 (如果且仅当m.containsKey(k)将返回true则映射m被称为包含关键字k的映射。)
        Specified by:
        put在接口 Map<K,V>
        实现要求:
        这个实现总是抛出一个 UnsupportedOperationException
        参数
        key - 指定值与之关联的键
        value - 与指定键相关联的值
        结果
        key相关联的上一个值,如果null没有映射, key (A null返回也可以表示该地图以前关联的nullkey ,如果实现支持null值)
        异常
        UnsupportedOperationException - 如果此地图不支持 put操作
        ClassCastException - 如果指定的键或值的类阻止它存储在此映射中
        NullPointerException - 如果指定的键或值为空,并且此映射不允许空值或值
        IllegalArgumentException - 如果指定键或值的某些属性阻止其存储在此映射中
      • remove

        public V remove​(Object key)
        如果存在(从可选的操作),从该地图中删除一个键的映射。 更正式地,如果该映射包含从k键到值v的映射,使得Objects.equals(key, k)删除该映射。 (地图最多可以包含一个这样的映射。)

        返回此映射先前关联该键的值,如果映射不包含关键字的映射,则返回null

        如果此映射允许空值,则返回值为null并不一定表示该映射不包含该键的映射; 映射也可能显式地将密钥映射到null

        一旦呼叫返回,该映射将不包含指定键的映射。

        Specified by:
        remove在接口 Map<K,V>
        实现要求:
        此实现遍历entrySet()搜索具有指定键的条目。 如果找到这样的条目,它的值是通过其getValue操作获得的,使用迭代器的remove操作将该条目从集合(和背景映射)中remove ,并返回保存的值。 如果迭代结束而没有找到这样的条目,则返回null 请注意,此实现需要在地图大小上具有线性时间; 许多实现将覆盖此方法。

        请注意,如果entrySet迭代器不支持remove方法,并且此映射包含指定键的映射,则此实现将抛出UnsupportedOperationException

        参数
        key - 要从地图中删除其映射的密钥
        结果
        先前的值相关联 key ,或 null如果没有映射 key
        异常
        UnsupportedOperationException - 如果此地图不支持 remove操作
        ClassCastException - 如果密钥对于此地图是不合适的类型( optional
        NullPointerException - 如果指定的键为空,并且此映射不允许空键( optional
      • putAll

        public void putAll​(Map<? extends K,? extends V> m)
        将指定地图的所有映射复制到此映射(可选操作)。 此呼叫的效果等同于在此地图上调用put(k, v)一次,从k关键字k到指定地图中的值v 如果在操作进行中修改了指定的地图,则此操作的行为是未定义的。
        Specified by:
        putAll在接口 Map<K,V>
        实现要求:
        此实现将遍历指定的地图entrySet()集合,并为迭代返回的每个条目调用此映射的put操作一次。

        请注意,如果此映射不支持put操作,并且指定的映射是非空的,则此实现将抛出UnsupportedOperationException

        参数
        m - 要存储在此地图中的映射
        异常
        UnsupportedOperationException - 如果此地图不支持 putAll操作
        ClassCastException - 如果指定地图中的键或值的类阻止它存储在此映射中
        NullPointerException - 如果指定的地图为空,或者该地图不允许空值或值,并且指定的地图包含空值或值
        IllegalArgumentException - 如果指定地图中的键或值的某些属性阻止其存储在此映射中
      • clear

        public void clear​()
        从该地图中删除所有的映射(可选操作)。 此呼叫返回后,地图将为空。
        Specified by:
        clear在接口 Map<K,V>
        实现要求:
        此实现调用entrySet().clear()

        注意,此实现抛出UnsupportedOperationException如果entrySet不支持clear操作。

        异常
        UnsupportedOperationException - 如果此地图不支持 clear操作
      • keySet

        public Set<K> keySet​()
        返回此地图中包含的键的Set视图。 该集合由地图支持,因此对地图的更改将反映在集合中,反之亦然。 如果在集合中的迭代正在进行中修改映射(除了通过迭代器自己的remove操作),迭代的结果是未定义的。 该组支持元件移除,即从映射中相应的映射,经由Iterator.removeSet.removeremoveAllretainAll ,和clear操作。 它不支持addaddAll操作。
        Specified by:
        keySet在接口 Map<K,V>
        实现要求:
        此实现返回一个子类AbstractSet的集合 子类的iterator方法在该映射的entrySet()迭代器上返回“包装对象”。 size方法委托给该地图的size方法和contains方法委托给该地图的containsKey方法。

        该集合是在第一次调用此方法时创建的,并响应所有后续调用而返回。 不执行同步,因此对该方法的多次调用将不会全部返回相同的集合。

        结果
        该地图中包含的键的集合视图
      • values

        public Collection<V> values​()
        返回此地图中包含的值的Collection视图。 集合由地图支持,因此对地图的更改将反映在集合中,反之亦然。 如果在集合中的迭代正在进行中修改映射(除了通过迭代器自己的remove操作),迭代的结果是未定义的。 该collection支持元素移除,即从映射中相应的映射,经由Iterator.removeCollection.removeremoveAllretainAllclear操作。 它不支持addaddAll操作。
        Specified by:
        values在接口 Map<K,V>
        实现要求:
        此实现返回一个子类AbstractCollection的集合。 子类的iterator方法在该映射的entrySet()迭代器上返回“包装对象”。 size方法将该地图的size方法和contains方法委托给该地图的containsValue方法。

        该集合是在第一次调用此方法时创建的,并响应所有后续调用而返回。 不执行同步,因此对该方法的多次调用将不会全部返回相同的集合。

        结果
        该地图中包含的值的集合视图
      • entrySet

        public abstract Set<Map.Entry<K,V>> entrySet​()
        描述从接口Map复制
        返回此地图中包含的映射的Set视图。 该集合由地图支持,因此对地图的更改将反映在集合中,反之亦然。 如果在集合中的迭代正在进行时(除了通过迭代器自己的remove操作或通过迭代器返回的映射条目上的setValue操作之外)修改映射,则迭代的结果是未定义的。 该组支持元件移除,即从映射中相应的映射,经由Iterator.removeSet.removeremoveAllretainAllclear操作。 它不支持addaddAll操作。
        Specified by:
        entrySet在接口 Map<K,V>
        结果
        该地图中包含的映射的集合视图
      • equals

        public boolean equals​(Object o)
        将指定的对象与此映射进行比较以获得相等性。 如果给定的对象也是一个地图,并且两个地图代表相同的映射,则返回true 更正式地,如果m1.entrySet().equals(m2.entrySet()) ,两个地图m1m2表示相同的映射。 这可以确保equals方法在Map接口的不同实现中正常工作。
        Specified by:
        equals在接口 Map<K,V>
        重写:
        equalsObject
        实现要求:
        该实现首先检查指定的对象是否是该映射; 如果是,则返回true 然后,它检查指定的对象是否是与该映射的大小相同大小的映射; 如果没有,则返回false 如果是这样,它会遍历该地图的entrySet集合,并检查指定的地图是否包含该地图包含的每个映射。 如果指定的映射不能包含这样的映射,则返回false 如果迭代完成,则返回true
        参数
        o - 要与该地图相等的对象
        结果
        true如果指定的对象等于此映射
        另请参见:
        Object.hashCode()HashMap
      • hashCode

        public int hashCode​()
        返回此地图的哈希码值。 映射的哈希码被定义为地图entrySet()视图中每个条目的哈希码的总和。 这确保了m1.equals(m2)意味着m1.hashCode()==m2.hashCode()对于任何两个地图m1m2 ,所要求的一般合同Object.hashCode()
        Specified by:
        hashCode在接口 Map<K,V>
        重写:
        hashCodeObject
        实现要求:
        该实现遍历 entrySet() ,在集合中的每个元素(条目)上调用 hashCode() ,并将结果相加。
        结果
        该地图的哈希码值
        另请参见:
        Map.Entry.hashCode()Object.equals(Object)Set.equals(Object)
      • toString

        public String toString​()
        返回此地图的字符串表示形式。 字符串表示由地图entrySet视图的迭代器返回的顺序的键值映射列表(括在大括号中)( "{}" )组成。 相邻的映射由字符", " (逗号和空格)分隔。 每个键值映射都作为键后跟一个等号( "=" ),后跟相关值。 键和值将转换为字符串,如String.valueOf(Object)
        重写:
        toStringObject
        结果
        该地图的字符串表示形式
      • clone

        protected Object clone​()
                        throws CloneNotSupportedException
        返回此 AbstractMap实例的浅拷贝:键和值本身不被克隆。
        重写:
        cloneObject
        结果
        这张地图的浅拷贝
        异常
        CloneNotSupportedException - 如果对象的类不支持Cloneable接口。 覆盖clone方法的子类也可以抛出此异常以指示实例无法克隆。
        另请参见:
        Cloneable