在Java中,Map
是一个用于存储键值对(key-value pairs)的集合,不允许重复的键,每个键映射到一个值。Map
接口有几个常用的实现类。以下是 Map
接口的主要知识点:
1. 主要方法
put(K key, V value)
:将指定的键key
和值value
添加到映射中。如果键已存在,更新其对应的值。get(Object key)
:返回指定键key
对应的值。remove(Object key)
:移除指定键key
和其对应的值。containsKey(Object key)
:检查映射中是否包含指定的键key
。containsValue(Object value)
:检查映射中是否包含指定的值value
。keySet()
:返回映射中所有键的集合。values()
:返回映射中所有值的集合。entrySet()
:返回映射中所有键值对的集合。size()
:返回映射中键值对的数量。clear()
:移除映射中的所有键值对。
2. 常见实现类
-
HashMap
:基于哈希表实现,键值对的顺序不确定,提供常数时间的操作性能。- 特点:不保证顺序,性能较高。
- 线程安全:
HashMap
不是线程安全的,若需线程安全的Map
,可以使用Collections.synchronizedMap
。
-
LinkedHashMap
:基于哈希表和链表实现,保持键值对的插入顺序。- 特点:保持插入顺序,性能介于
HashMap
和TreeMap
之间。
- 特点:保持插入顺序,性能介于
-
TreeMap
:基于红黑树实现,键按自然顺序或构造时指定的比较器顺序排列。- 特点:键有序,提供对键的排序。
- 线程安全:同样不是线程安全的。
3.遍历map
使用 entrySet()
和迭代器:
for (Map.Entry<K, V> entry : map.entrySet()) {
K key = entry.getKey();
V value = entry.getValue();
// 处理键值对
}
使用增强的for循环
for (K key : map.keySet()) {
V value = map.get(key);
// 处理键值对
}
4.实用工具
Collections
类:提供了将 Map
包装成线程安全或只读的版本。
Map<K, V> synchronizedMap = Collections.synchronizedMap(map);
Map<K, V> unmodifiableMap = Collections.unmodifiableMap(map);