File tree 2 files changed +80
-0
lines changed
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