![Java核心编程](https://wfqqreader-1252317822.image.myqcloud.com/cover/463/34752463/b_34752463.jpg)
4.4 Map接口
Map是将键映射到值的对象。Map不能包含重复键,每个键最多可映射一个值。
Map接口包括基本操作的方法(如put、get、remove、containsKey、containsValue、size和empty)、批量操作(如putAll和clear)和集合视图(如keySet、entrySet和values)。
Java平台包含3个通用的Map实现:HashMap、TreeMap和LinkedHashMap。它们的行为和性能完全类似于HashSet、TreeSet和LinkedHashSet。
4.4.1 Map接口基本操作
Map基本操作的方法(如put、get、remove、containsKey、containsValue、size和empty)与Hashtable中的对应操作完全相同。以下程序用于统计单词出现的次数:
![](https://epubservercos.yuewen.com/7C97BD/18562448808360806/epubprivate/OEBPS/Images/Figure-P119_54809.jpg?sign=1738913257-zf6c7pjqiYRPsrcabkRleP41H1qZTktG-0-42c5126fc47a430afa111796ca8d2c08)
4.4.2 Map接口批量操作
putAll操作是Collection接口的addAll操作的Map模拟。除了将一个Map转储到另一个Map之外,它还有第二个用途,提供一种使用默认值实现属性映射创建的简洁方法。下面演示第二个用途的静态工厂方法:
![](https://epubservercos.yuewen.com/7C97BD/18562448808360806/epubprivate/OEBPS/Images/Figure-P119_54810.jpg?sign=1738913257-tKID9m0q76UAYJWkbU7ZICwsi2jASLEm-0-9d71ca57079fd8af993b47e22a44ba27)
4.4.3 Map集合视图
Collection视图方法允许以下3种方式将Map视为Collection:
· keySet:Map中包含的键集。
· values:Map中包含的值集合。此Collection不是Set,因为多个键可以映射到相同的值。
· entrySet:Map中包含的键值对集合。Map接口提供了一个名为Map.Entry的小型嵌套接口。
Collection视图提供迭代Map的唯一方法。此示例使用for-each来迭代Map中的键:
![](https://epubservercos.yuewen.com/7C97BD/18562448808360806/epubprivate/OEBPS/Images/Figure-P119_54812.jpg?sign=1738913257-e6HmpRFGyFR1pjn6rwwzfAAi2yBpuZ1h-0-54ca1dca3e4330b6d6cd1145d9eff81d)
以下示例使用迭代器来过滤数据:
![](https://epubservercos.yuewen.com/7C97BD/18562448808360806/epubprivate/OEBPS/Images/Figure-P120_54815.jpg?sign=1738913257-ENpUmu0OlcubRIujPoKfvTleybAySKAd-0-fd7a03f9914c8c9c23a8aada0f709d60)
以下示例将Map的键和值都迭代输出:
![](https://epubservercos.yuewen.com/7C97BD/18562448808360806/epubprivate/OEBPS/Images/Figure-P120_54816.jpg?sign=1738913257-nkZoDblAm1WdWFAS4wYkJmHHdKxqAwyr-0-d24641b6f1eec42438fd460eb74b8261)
Collection视图还支持多种形式来删除元素,包括remove、removeAll、retainAll、clear和Iterator.remove操作。
需要注意的是,Collection视图在任何情况下都不支持元素添加。