1. 概述
在这个教程中,我们将讨论Java中Map
接口的三个方法:keySet()
、entrySet()
和values()
。这些方法分别用于获取键集、键值对集合和值集合。
2. Map
初始化
虽然我们可以在实现Map
接口的任何类上使用这些方法,如HashMap
、TreeMap
和LinkedHashMap
,但这里我们将与HashMap
一起工作。
让我们创建并初始化一个键类型为String
,值类型为Integer
的HashMap
:
Map<String, Integer> map = new HashMap<>();
map.put("one", 1);
map.put("two", 2);
3. keySet()
方法
keySet()
方法返回Map
中的键的Set
。
将keySet()
方法应用到Map
上,并将其存储在Set
变量actualValues
中:
Set<String> actualValues = map.keySet();
现在,确认返回的Set
的大小为2:
assertEquals(2, actualValues.size());
进一步观察,我们可以看到返回的Set
包含了Map
的键:
assertTrue(actualValues.contains("one"));
assertTrue(actualValues.contains("two"));
4. entrySet()
方法
entrySet()
方法返回键值对的集合。 这个方法不接受参数,返回类型为Set<Map.Entry>
。
将entrySet()
方法应用到Map
上:
Set<Map.Entry<String, Integer>> actualValues = map.entrySet();
如我们所见,actualValues
是一个Map.Entry
对象的Set
。
Map.Entry
是一个静态接口,它包含了键和值。内部有两个实现——AbstractMap.SimpleEntry
和AbstractMap.SimpleImmutableEntry
。
同样,确认返回的Set
的大小为2:
assertEquals(2, actualValues.size());
此外,我们能看到返回的Set
包含了Map
的键值对:
assertTrue(actualValues.contains(new SimpleEntry<>("one", 1)));
assertTrue(actualValues.contains(new SimpleEntry<>("two", 2)));
这里,我们选择Map.Entry
接口的AbstractMap.SimpleEntry
实现进行测试。
5. values()
方法
values()
方法返回Map
中的值的Collection
。 这个方法不接受参数,返回类型为Collection
。
将values()
方法应用到Map
上,并将其存储在Collection
变量actualValues
中:
Collection<Integer> actualValues = map.values();
现在,验证返回的Collection
的大小:
assertEquals(2, actualValues.size());
进一步观察,我们可以看到返回的Set
包含了Map
的值:
assertTrue(actualValues.contains(1));
assertTrue(actualValues.contains(2));
6. 总结
在这篇文章中,我们讨论了Map
接口的keySet()
、entrySet()
和values()
方法。
如往常一样,完整的源代码可以在GitHub上找到。