File tree Expand file tree Collapse file tree 2 files changed +80
-0
lines changed Expand file tree Collapse file tree 2 files changed +80
-0
lines changed Original file line number Diff line number Diff line change 1+
2+
3+
4+ ## Maps
5+
6+ ` Map ` 接口是主要集合框架接口中的最后一个,也是唯一不能从 ` Collection ` 继承的接口。 它定义了一组键值对关联所支持的操作,其中键是唯一的。 这些操作如图 ` 16-1 ` 所示,分为以下四组,大致平行于 ` Collection-adding ` 元素的四个操作组,删除元素,查询集合内容以及提供集合内容的不同视图。
7+
8+ ** 添加关联**
9+
10+ ``` java
11+ V put(K key, V value) // 如果密钥存在,则添加或替换键值关联返回旧值(可能为空); 否则返回null
12+ void putAll(Map<? extends K ,? extends V > m) // 将提供的映射中的每个键值关联添加到接收器中
13+ ```
14+
15+ 该组中的操作是可选的; 在不可修改的映射上调用它们将导致 ` UnsupportedOperationException ` 。
16+
17+ ** 删除关联**
18+
19+ ``` java
20+ void clear() // 从此地图中删除所有关联
21+ V remove(Object key) // 使用给定的密钥去除关联(如果有的话); 返回与其关联的值,或返回null
22+ ```
23+
24+ ` Map.remove ` 的签名与 ` Collection.remove ` 的签名相似(请参阅第 ` 12.1 ` 节),因为它采用 ` Object ` 类型的参数而不是泛型类型。 我们讨论过了 ` 2.6 ` 节中的这个设计的替代方案。
25+
26+ 像前一组的添加操作一样,这些删除操作是可选的。
27+
28+ ** 查询 Map 的内容**
29+
30+ ``` java
31+ V get(Object k) // 返回对应于k的值;如果k不存在,则返回null
32+ boolean containsKey(Object k) // 如果k作为键存在,则返回true
33+ boolean containsValue(Object v) // 如果v作为值存在,则返回true
34+ int size() // 返回关联的数量
35+ boolean isEmpty() // 如果没有关联,则返回true
36+ ```
37+
38+ ![ ] ( 16_1.png )
39+
40+ 图 ` 16-1 ` ` Map `
41+
42+ 对于允许空键或值(分别)的 ` Map ` 实现,` containsKey ` 和 ` containsValue ` 的参数可能为 ` null ` 。 如果为这些方法提供了 ` null ` 参数,则不允许为 ` null ` 的实现将抛出 ` NullPointerException ` 。
43+
44+ 与 ` Collection ` 的 ` size ` 方法一样,可以报告的最大元素数量是 ` Integer.MAX_VALUE ` 。
45+
46+ 提供键,值或关联的集合视图:
47+
48+ ``` java
49+ Set<Map .Entry<K , V > > entrySet() // 返回关联的Set视图
50+ Set<K > keySet() // 返回键的Set视图
51+ Collection<V > values() // 返回值的集合视图
52+ ```
53+
54+ 这些方法返回的集合由地图支持,因此对地图的任何更改都会反映在地图本身中,反之亦然。事实上,通过视图只能进行有限的更改:可以直接或通过视图上的迭代器删除元素,但不能添加元素;如果你尝试,你会得到一个 ` UnsupportedOperationException ` 。删除键可删除单个相应的键值关联;另一方面,删除值只会删除映射到其中的一个关联;该值可能仍然作为与不同密钥关联的一部分存在。如果支持地图被同时修改,则视图上的迭代器将变为未定义。
55+
56+ ` entrySet ` 返回的集合的成员实现了接口 ` Map.Entry ` ,它表示键值关联并提供了一个 ` setValue ` 方法,可用于更改备份映射中的值。` Map.Entry ` 的文档在指定实现接口的对象时只能在通过 ` entrySet ` 调用产生的视图迭代期间创建,并且如果在此迭代过程中修改了支持映射,则这些对象变为无效。在 ` Java 6 ` 中,创建 ` Map.Entry ` 对象的这种限制性方案不够充分,因为它是 ` NavigableMap ` 的许多方法的返回类型(请参见第 ` 16.3 ` 节)。
57+
58+
59+
60+
61+
62+
63+
64+
65+
66+
67+
68+
69+
70+
71+
72+
73+
74+
75+
76+
77+
78+
79+
80+
You can’t perform that action at this time.
0 commit comments