「这是我参与2022首次更文挑战的第21天,活动详情查看:2022首次更文挑战」
1.0 Map集合介绍
- Map用于保存具有映射关系的数据,Map里保存着两组数据:key和value,它们都可以使任何引用类型的数据,但key不能重复。所以通过指定的key就可以取出对应的value。

HashMap: 元素按照键是无序,不重复,无索引,值不做要求
LinkedHashMap: 元素按照键是有序,不重复,无索引,值不做要求
1.1 Map集合概述和特点
- Map集合是一种双列集合,每个元素包含两个值
- Interface Map<K,V>; K:键的类型,V:值的类型
- Map集合的每个元素的格式:key = value(键值对元素)
- Map集合也被称为“键值对集合”
- Map集合特点:
- Map 集合的键是 无序,不重复,无索引的
- Map 集合后面重复的键对应的元素会 覆盖 前面的整个元素
- 创建Map集合对象:
1.2 Map集合的基本方法
| 方法名 | 说明 |
|---|
| public V put(K key, V value) | 添加元素 |
| public V remove(Object key) | 根据键删除键值对元素 |
| public void clear() | 移除所有键值对元素 |
| public boolean containKey(Object key) [kənˈteɪn] | 判断集合是否包含指定的键 |
| public boolean containValue(Object value) | 判断集合是否包含指定的值 |
| public boolean isEmpty() | 判断集合是否为空 |
| public int size() | 集合的长度,也就是集合中键值对个数 |
1.3 Map集合的获取方法(重点)
| 方法名 | 说明 |
|---|
| public V get(Object key) | 根据键获取值 |
public Set<K> keySet() | 获取所有键的集合,存储到Set集合中 |
public Collection<V> values() | 获取所有值的集合,存储到Collection集合中 |
public Set<Map.Entry<K,V>> entrySet() | 获取所有键值对对象的集合(Set集合) |
1.4 Map集合的遍历
- Map 集合遍历有三种方式:
- "键找值"的方式遍历
- "键值对"的方式遍历
- Lambda 表达式(JDK1.8开始之后的新技术)
1.4.1 "键找值"的方式遍历(常用)
- 1、获取所有键的集合:用
keySet()方法实现
- 2、遍历键的集合,获取到每一个键:用增强for遍历实现
- 3、根据键去找值:在增强for中,用
get(Object key)方法实现
package ceshi;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class MapDemo {
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
map.put("y1", "10");
map.put("y2", "20");
map.put("y3", "30");
System.out.println(map);
Set<String> keySet = map.keySet();
for (String key : keySet) {
String value = map.get(key);
System.out.println(key + "=" + value);
}
}
}
1.4.2 "键值对"的方式遍历
- 1、获取所有键值对对象的集合:
Set<Map.Entry<K,V>> entrySet()
- 2、遍历键值对对象的集合,得到每一个键值对对象:用增强for实现,得到每一个
Map.Entry
- 3、根据键值对对象获取键和值:在增强for中,用
geKey()得到键;用getValue()得到值
package ceshi;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class MapDemo {
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
map.put("y1", "10");
map.put("y2", "20");
map.put("y3", "30");
System.out.println(map);
Set<Map.Entry<String, String>> entrySet = map.entrySet();
for(Map.Entry<String, String> me:entrySet) {
String key = me.getKey();
String value = me.getValue();
System.out.println(key+"="+value);
}
}
}
1.4.3 Lambda [ˈlæmdə] 表达式方式遍历
package ceshi;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class MapDemo {
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
map.put("y1", "10");
map.put("y2", "20");
map.put("y3", "30");
System.out.println(map);
map.forEach((k , v) -> {
System.out.println(k+"="+v);
});
}
}
1.5 Map集合存储自定义类型
- Map集合的键和值都可以存储自定义类型
- 如果希望Map集合认为自定义类型的键对象重复了,必须重写对象的
hashCode()和equals()方法
1.6 LinkedHashMap(HashMap子类)
- LinkedHashMap集合是有序不重复的键值对集合
public class LinkedHashMapDemo {
public static void main(String[] args) {
Map<String , Integer> map = new LinkedHashMap<>();
map.put("y1",10);
map.put("y2",20);
map.put("y3",30);
map.put("y3",100);
System.out.println(map);
}
}
1.7 TreeMap
- TreeMap 集合按照键是可排序不重复的键值对集合(默认升序)