添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
此类提供 Map 接口的骨干实现,以最大限度地减少实现此接口所需的工作。

要实现不可修改的映射,编程人员只需扩展此类并提供 entrySet 方法的实现即可,该方法将返回映射的映射关系 set 视图。通常,返回的 set 将依次在 AbstractSet 上实现。此 set 不支持 add remove 方法,其迭代器也不支持 remove 方法。

要实现可修改的映射,编程人员必须另外重写此类的 put 方法(否则将抛出 UnsupportedOperationException ), entrySet().iterator() 返回的迭代器也必须另外实现其 remove 方法。

按照 Map 接口规范中的建议,编程人员通常应该提供一个 void(无参数)构造方法和 map 构造方法。

此类中每个非抽象方法的文档详细描述了其实现。如果要实现的映射允许更有效的实现,则可以重写所有这些方法。

此类是 Java Collections Framework 的成员。 public int size ()

返回此映射中的键-值映射关系数。如果该映射包含的元素大于 Integer.MAX_VALUE ,则返回 Integer.MAX_VALUE

此实现返回 entrySet().size()

指定者:
接口 Map < K , V > 中的 size
返回:
此映射中的键-值映射关系数
public boolean containsValue ( Object value)
如果此映射将一个或多个键映射到指定值,则返回 true 。更确切地讲,当且仅当此映射至少包含一个对满足 (value==null ? v==null : value.equals(v)) 的值 v 的映射关系时,返回 true 。对于大多数 Map 接口的实现而言,此操作需要的时间可能与映射大小呈线性关系。

此实现在 entrySet() 上进行迭代,以搜索带有指定值的条目。如果找到这样的条目,则返回 true 。如果迭代终止,并且没有找到这样的条目,则返回 false 。注意,此实现所需的时间与映射的大小呈线性关系。

指定者:
接口 Map < K , V > 中的 containsValue
参数:
value - 测试是否存在于此映射中的值
返回:
如果此映射将一个或多个键映射到指定值,则返回 true
ClassCastException - 如果该值对于此映射是不合适的类型(可选)
NullPointerException - 如果指定值为 null 并且此映射不允许 null 值(可选)
public boolean containsKey ( Object key)
如果此映射包含指定键的映射关系,则返回 true 。更确切地讲,当且仅当此映射包含针对满足 (key==null ? k==null : key.equals(k)) 的键 k 的映射关系时,返回 true 。(最多只能有一个这样的映射关系)。

此实现在 entrySet() 上进行迭代,以搜索带有指定键的条目。如果找到这样的条目,则返回 true 。如果迭代终止,并且没有找到这样的条目,则返回 false 。注意,此实现所需的时间与映射的大小呈线性关系;许多实现将重写此方法。

指定者:
接口 Map < K , V > 中的 containsKey
参数:
key - 测试是否存在于此映射中的键
返回:
如果此映射包含指定键的映射关系,则返回 true
ClassCastException - 如果该键对于此映射是不合适的类型(可选)
NullPointerException - 如果指定键为 null 并且此映射不允许 null 键(可选)

更确切地讲,如果此映射包含满足 (key==null ? k==null : key.equals(k)) 的键 k 到值 v 的映射关系,则此方法返回 v ;否则返回 null 。(最多只能有一个这样的映射关系)。

如果此映射允许 null 值,则返回 null 值并不 一定 表示该映射不包含该键的映射关系;也可能该映射将该键显示地映射到 null 。使用 containsKey 操作可区分这两种情况。

此实现在 entrySet() 上进行迭代,以搜索带有指定键的条目。如果找到这样的条目,则返回该条目的值。如果迭代终止,并且没有找到这样的条目,则返回 null 。注意,此实现所需的时间与映射的大小呈线性关系;许多实现将重写此方法。

指定者:
接口 Map < K , V > 中的 get
参数:
key - 要返回其关联值的键
返回:
指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null
ClassCastException - 如果该键对于此映射是不合适的类型(可选)
NullPointerException - 如果指定键为 null 并且此映射不允许 null 键(可选)
V value)
将指定的值与此映射中的指定键关联(可选操作)。如果此映射以前包含一个该键的映射关系,则用指定值替换旧值(当且仅当 m.containsKey(k) 返回 true 时,才能说映射 m 包含键 k 的映射关系)。

此实现始终抛出 UnsupportedOperationException

指定者:
接口 Map < K , V > 中的 put
参数:
key - 与指定值关联的键
value - 与指定键关联的值
返回:
以前与 key 关联的值,如果没有针对 key 的映射关系,则返回 null 。(如果该实现支持 null 值,则返回 null 也可能表示此映射以前将 null key 关联)。
UnsupportedOperationException - 如果此映射不支持 put 操作
ClassCastException - 如果指定键或值的类不允许将其存储在此映射中
NullPointerException - 如果指定键或值为 null,并且此映射不允许 null 键或值
IllegalArgumentException - 如果指定键或值的某些属性不允许将其存储在此映射中
public V remove ( Object key)
如果存在一个键的映射关系,则将其从此映射中移除(可选操作)。更确切地讲,如果此映射包含从满足 (key==null ? k==null :key.equals(k)) 的键 k 到值 v 的映射关系,则移除该映射关系。(该映射最多只能包含一个这样的映射关系。)

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

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

调用返回后,此映射将不再包含指定键的映射关系。

此实现在 entrySet() 上进行迭代,以搜索带有指定键的条目。如果找到这样的条目,则通过 getValue 操作获取该条目的值,然后使用迭代器的 remove 操作从 collection(以及底层实现映射)中移除该条目,并返回保存的值。如果迭代终止,并且没有找到这样的条目,则返回 null 。注意,此实现所需的时间与映射大小呈线性关系;许多实现将重写此方法。

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

指定者:
接口 Map < K , V > 中的 remove
参数:
key - 从映射中移除其映射关系的键
返回:
以前与 key 关联的值;如果没有 key 的映射关系,则返回 null
UnsupportedOperationException - 如果此映射不支持 remove 操作
ClassCastException - 如果该键对于此映射是不合适的类型(可选)
NullPointerException - 如果指定键为 null 并且此映射不允许 null 键(可选)
public void putAll ( Map <? extends K ,? extends V > m)
从指定映射中将所有映射关系复制到此映射中(可选操作)。对于指定映射中的每个键 k 到值 v 的映射关系,此调用等效于对此映射调用一次 put(k, v) 。如果正在进行此操作的同时修改了指定的映射,则此操作的行为是不确定的。

此实现在指定映射的 entrySet() collection 上进行迭代,并对迭代返回的每个条目调用一次此映射的 put 操作。

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

指定者:
接口 Map < K , V > 中的 putAll
参数:
m - 要存储在此映射中的映射关系
UnsupportedOperationException - 如果此映射不支持 putAll 操作
ClassCastException - 如果指定映射中的键或值的类不允许将其存储在此映射中
NullPointerException - 如果指定映射为 null,或者此映射不允许 null 键或值,并且指定的映射包含 null 键或值
IllegalArgumentException - 如果指定映射中的键或值的某些属性不允许将其存储在此映射中

此实现调用 entrySet().clear()

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

指定者:
接口 Map < K , V > 中的 clear
UnsupportedOperationException - 如果此映射不支持 clear 操作
public Set < K > keySet ()
返回此映射中包含的键的 Set 视图。该 set 受映射支持,所以对映射的更改可在此 set 中反映出来,反之亦然。如果对该 set 进行迭代的同时修改了映射(通过迭代器自己的 remove 操作除外),则迭代结果是不确定的。set 支持元素移除,通过 Iterator.remove Set.remove removeAll retainAll clear 操作可从映射中移除相应的映射关系。它不支持 add addAll 操作。

此实现返回一个子类化 AbstractSet 的 set。子类的 iterator 方法通过此映射的 entrySet() 迭代器返回一个“包装器对象”。 size 方法委托给此映射的 size 方法, contains 方法委托给此映射的 containsKey 方法。

set 是在第一次调用此方法时创建的,并为响应所有后续调用而返回。 因为不执行同步操作,所以对此方法的多个调用几乎总是返回相同的 set。

指定者:
接口 Map < K , V > 中的 keySet
返回:
此映射中包含的键的 set 视图
public Collection < V > values ()
返回此映射中包含的值的 Collection 视图。该 collection 受映射支持,所以对映射的更改可在此 collection 中反映出来,反之亦然。如果对该 collection 进行迭代的同时修改了映射(通过迭代器自己的 remove 操作除外),则迭代结果是不确定的。collection 支持元素移除,通过 Iterator.remove Collection.remove removeAll retainAll clear 操作可从映射中移除相应的映射关系。它不支持 add addAll 操作。

此实现返回一个子类化 AbstractCollection 的 collection。子类的 iterator 方法通过此映射的 entrySet() 迭代器返回一个“包装器对象”。 size 方法委托给此映射的 size 方法, contains 方法委托给此映射的 containsValue 方法。

collection 是在第一次调用此方法时创建的,并为响应所有后续调用而返回。因为不执行同步操作,所以对此方法的多个调用几乎总是返回相同的 collection。

指定者:
接口 Map < K , V > 中的 values
返回:
此映射中包含的值的 collection 视图
从接口 Map 复制的描述
返回此映射中包含的映射关系的 Set 视图。该 set 受映射支持,所以对映射的更改可在此 set 中反映出来,反之亦然。如果对该 set 进行迭代的同时修改了映射(通过迭代器自己的 remove 操作,或者通过对迭代器返回的映射项执行 setValue 操作除外),则迭代结果是不确定的。set 支持元素移除,通过 Iterator.remove Set.remove removeAll retainAll clear 操作可从映射中移除相应的映射关系。它不支持 add addAll 操作。
指定者:
接口 Map < K , V > 中的 entrySet
返回:
此映射中包含的映射关系的 set 视图
public boolean equals ( Object o)
比较指定对象与此映射的相等性。如果给定对象也是一个映射并且两个映射表示相同的映射关系,则返回 true 。更确切地讲,如果 m1.entrySet().equals(m2.entrySet()) ,则两个映射 m1 m2 表示相同的映射关系。这可以确保 equals 方法在 Map 接口的不同实现中正常工作。

此实现首先检查指定的对象是否为此映射;如果是,则返回 true 。然后,它将检查指定的对象是否是一个大小与此映射相等的映射;如果不是,则返回 false 。如果是,则在此映射的 entrySet collection 上进行迭代,并检查指定的映射是否包含此映射所包含的每个映射关系。如果指定的映射中不包含这样的映射关系,则返回 false 。如果迭代完成,则返回 true

指定者:
接口 Map < K , V > 中的 equals
覆盖:
Object 中的 equals
参数:
o - 要与此映射进行相等性比较的对象
返回:
如果指定的对象等于此映射,则返回 true
另请参见:
Object.hashCode() , Hashtable
public int hashCode ()
返回此映射的哈希码值。映射的哈希码被定义为该映射的 entrySet() 视图中每个条目的哈希码之和。这确保了 m1.equals(t2) 对于任意两个映射 m1 m2 都意味着 m1.hashCode()==m2.hashCode() ,正如 Object.hashCode() 的常规协定所要求的。

此实现在 entrySet() 上进行迭代,对 set 中的每个元素(条目)调用 hashCode() ,并合计结果。

指定者:
接口 Map < K , V > 中的 hashCode
覆盖:
Object 中的 hashCode
返回:
此映射的哈希码值。
另请参见:
Map.Entry.hashCode() , Object.equals(Object) , Set.equals(Object)
public String toString ()
返回此映射的字符串表示形式。该字符串表示形式由键-值映射关系列表组成,按照该映射 entrySet 视图的迭代器返回的顺序排列,并用括号 ( "{}" ) 括起来。相邻的映射关系是用字符 ", " (逗号加空格)分隔的。每个键-值映射关系按以下方式呈现:键,后面是一个等号 ( "=" ),再后面是关联的值。键和值都通过 String.valueOf(Object) 转换为字符串。
覆盖:
Object 中的 toString
返回:
此映射的字符串表示形式。