![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=1738826224-6K97IEaraMNyiEyfQYmAeqZzyULX73PL-0-982e7681203b2dad0c589355ab877138)
4.4.2 Map接口批量操作
putAll操作是Collection接口的addAll操作的Map模拟。除了将一个Map转储到另一个Map之外,它还有第二个用途,提供一种使用默认值实现属性映射创建的简洁方法。下面演示第二个用途的静态工厂方法:
![](https://epubservercos.yuewen.com/7C97BD/18562448808360806/epubprivate/OEBPS/Images/Figure-P119_54810.jpg?sign=1738826224-rA54w2bri0oFu7WHWqiNUUqF28EbEyck-0-0840ac593f2ce52ea725cfee7bca517b)
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=1738826224-aM0fHRcFiG0VZdo4ZcsSKGY4GGZy05W7-0-8079042466151c6ed8f0e475bfbee287)
以下示例使用迭代器来过滤数据:
![](https://epubservercos.yuewen.com/7C97BD/18562448808360806/epubprivate/OEBPS/Images/Figure-P120_54815.jpg?sign=1738826224-1JpXxKQoUczdnOasuUukqt3lyzrtol71-0-83e0db272e34651d02fef4d80a9173c1)
以下示例将Map的键和值都迭代输出:
![](https://epubservercos.yuewen.com/7C97BD/18562448808360806/epubprivate/OEBPS/Images/Figure-P120_54816.jpg?sign=1738826224-jb3ZQKyeqt11O1myXcb8OUiamSFVLKpm-0-cbbaa8c229b3249694600eafb8944fdc)
Collection视图还支持多种形式来删除元素,包括remove、removeAll、retainAll、clear和Iterator.remove操作。
需要注意的是,Collection视图在任何情况下都不支持元素添加。