Skip to content

Latest commit

 

History

History
66 lines (46 loc) · 3.5 KB

File metadata and controls

66 lines (46 loc) · 3.5 KB

《《《 返回首页
《《《 上一节

Maps

Map 接口是主要集合框架接口中的最后一个,也是唯一不能从 Collection 继承的接口。 它定义了一组键值对关联所支持的操作,其中键是唯一的。 这些操作如 图 16-1 所示,分为以下四组,大致平行于 Collection-adding 元素的四个操作组,删除元素,查询集合内容以及提供集合内容的不同视图。

添加关联

V put(K key, V value) // 如果密钥存在,则添加或替换键值关联返回旧值(可能为空); 否则返回null
void putAll(Map<? extends K,? extends V> m) // 将提供的映射中的每个键值关联添加到接收器中

该组中的操作是可选的; 在不可修改的映射上调用它们将导致 UnsupportedOperationException

删除关联

void clear() // 从此地图中删除所有关联
V remove(Object key) // 使用给定的密钥去除关联(如果有的话); 返回与其关联的值,或返回null

Map.remove 的签名与 Collection.remove 的签名相似(请参阅第 12.1 节),因为它采用 Object 类型的参数而不是泛型类型。 我们讨论过了 2.6 节 中的这个设计的替代方案。

像前一组的添加操作一样,这些删除操作是可选的。

查询 Map 的内容

V get(Object k) // 返回对应于k的值;如果k不存在,则返回null
boolean containsKey(Object k) // 如果k作为键存在,则返回true
boolean containsValue(Object v) // 如果v作为值存在,则返回true
int size() // 返回关联的数量
boolean isEmpty() // 如果没有关联,则返回true

16-1 Map

对于允许空键或值(分别)的 Map 实现,containsKeycontainsValue 的参数可能为 null。 如果为这些方法提供了 null 参数,则不允许为 null 的实现将抛出 NullPointerException

Collectionsize 方法一样,可以报告的最大元素数量是 Integer.MAX_VALUE

提供键,值或关联的集合视图:

Set<Map.Entry<K, V>> entrySet() // 返回关联的Set视图
Set<K> keySet() // 返回键的Set视图
Collection<V> values() // 返回值的集合视图

这些方法返回的集合由地图支持,因此对地图的任何更改都会反映在地图本身中,反之亦然。事实上,通过视图只能进行有限的更改:可以直接或通过视图上的迭代器删 除元素,但不能添加元素;如果你尝试,你会得到一个 UnsupportedOperationException。删除键可删除单个相应的键值关联;另一方面,删除值只会删除映射到其中 的一个关联;该值可能仍然作为与不同密钥关联的一部分存在。如果支持地图被同时修改,则视图上的迭代器将变为未定义。

entrySet 返回的集合的成员实现了接口 Map.Entry,它表示键值关联并提供了一个 setValue 方法,可用于更改备份映射中的值。Map.Entry 的文档在指定 实现接口的对象时只能在通过 entrySet 调用产生的视图迭代期间创建,并且如果在此迭代过程中修改了支持映射,则这些对象变为无效。在 Java 6 中,创建 Map.Entry 对象的这种限制性方案不够充分,因为它是 NavigableMap 的许多方法的返回类型(请参见第 16.3 节)。

《《《 下一节
《《《 返回首页