Java集合:Map集合体系
1. Map集合的概述
- Map集合是一种双列集合,每个元素包含两个数据。
- Map集合的每个元素的格式:key = value(键值对元素)。
- Map集合也被称为“键值对集合”。
- Map集合整体格式:
- Collection集合的格式:[元素1,元素2,元素3…]
- Map集合的完整格式:{key1=value1,key2=value2,key3=value3,…}
2. Map集合体系特点
- Map集合的特点都是由键决定的。
- Map集合的键是无序,不重复的,无索引的,值不做要求(可以重复)。
- Map集合后面重复的键对应的值会覆盖前面重复的键的值。
- Map集合的键值对都可以为null。
- Map集合实现类特点:
- HashMap:元素按照键是无序,不重复,无索引,值不做要求。
- LinkedHashMap:元素按照键是有序,不重复,无索引,值不做要求。
- TreeMap:元素按照键是排序,不重复,无索引的,值不做要求。
3. Map集合常用API
- Map是双列集合的祖宗接口,它的功能是全部双列集合都可以继承使用的。
- Map API如下:
方法名称 | 说明 |
---|
V put(K key,V value) | 添加元素 |
V remove(Object key) | 根据键删除键值对元素 |
void clear() | 移除所有的键值对元素 |
boolean containsKey(Object Key) | 判断集合是否包含指定的键 |
boolean containsValue(Object value) | 判断集合是否包含指定的值 |
boolean isEmpty() | 判断集合是否为空 |
int size() | 集合的长度,也就是几个中键值对的个数 |
4. Map集合的遍历
4.1 键找值
- 先获取Map集合的全部键的Set集合
- 遍历键的Set集合,然后通过键提取对应值
- 键找值涉及到的API:
方法名称 | 说明 |
---|
Set<K> keySet() | 获取所有键的集合 |
V get(Object key) | 根据键获取值 |
Set<String> keys = map.keySet();
for (String key : keys) {
int value = map.get(key);
System.out.println(key + "=" + value);
}
4.2 键值对
- 先把Map集合转换成Set集合,Set集合中每个元素都是键值对实体类型了。
- 遍历Set集合,然后提取键以及提取值。
- 键值对涉及到的API:
方法名称 | 说明 |
---|
Set<Map.Entry<K,V>> entrySet() | 获取所有键值对对象的集合 |
K getKey() | 获得键 |
V getValue() | 获得值 |
Set<Map.Entry<String, Integer>> entries = map.entrySet();
for (Map.Entry<String, Integer> entry : entries) {
String key = entry.getKey();
Integer value = entry.getValue();
System.out.println(key + "=" + value);
}
4.3 Lambda表达式
- 得益于JDK8开始的新技术Lambda表达式,提供了一种更简单、更直接的遍历集合方式。
- Map结合Lambda遍历的API
方法名称 | 说明 |
---|
default void forEach(BiConsumer<? super K, ? super V> action) | 结合Lambda遍历Map集合 |
map.forEach((k,v) -> {
System.out.println(k + "=" + v);
});
5. HashMap
- HashMap是Map里面的一个实现类。特点都是由键决定的:无序、不重复、无索引。
- HashMap跟HashSet底层原理是一摸一样的,都是哈希表结构,只是HashMap的每个元素包含两个值而已。
- 实际上:Set系列集合的底层就是Map实现的,只是Set集合中的元素只要键数据,不要值数据而已。
6. LinkedHashMap
- 由键决定:有序、不重复、无索引。
- 这里的有序指的是保证存储和取出的元素顺序一致。
- 原理:底层数据结构依然是哈希表,只是每个键值对元素又额外的多了一个双链表的机制记录存储的顺序。
7. TreeMap
- 由键决定特性:不重复、无索引、可排序
- 可排序:按照键数据的大小默认升序(由小到大)排序。只能对键排序。
- 注意:TreeMap集合是一定要排序的,可以默认排序,也可以将键按照指定的规则进行排序。
- TreeMap跟TreeSet的底层原理是一样的。
- TreeMap集合自定义排序规则有2种
- 类实现Comparable接口,重写比较规则。
- 集合自定义Comparator比较器对象,重写比较规则。