Skip to content

Commit 8a521d6

Browse files
committed
add
1 parent c6f4dba commit 8a521d6

File tree

2 files changed

+80
-0
lines changed

2 files changed

+80
-0
lines changed

Diff for: ch16/00_Maps.md

+80
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
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+

Diff for: ch16/16_1.png

49.8 KB
Loading

0 commit comments

Comments
 (0)