一、双列集合**(Map)**
1.1 双列集合的特点
在 Java 中,双列集合(Map) 是一种用于存储 "键-值对"(Key-Value Pair) 的数据结构,其中每个键(Key)唯一,通过键可以快速检索对应的值(Value)。它是 Java 集合框架中与单列集合(如 List、Set)并列的重要组成部分。

红色的我们称之为"键",蓝色的我们称之为"值"。键和值一一对应。



| 特性 | 说明 |
|---|---|
| 键唯一性 | 同一个 Map 中,任意两个键不能相等(通过 equals() 判断) |
| 值可重复 | 多个键可以对应相同的值 |
| 无索引概念 | 不像 List 那样通过下标访问,而是通过 键 查找值 |
| 非 Collection 子接口 | Map 与 Collection 并列,不属于 List/Set 体系 |
| 支持泛型 | 可指定键和值的类型,如 Map<String, Integer> |
| 允许 null(视实现而定) | 如 HashMap 允许一个 null 键和多个 null 值 |
💡 本质 :Map 是一种 "关联数组" 或 "字典" 结构,强调 "通过标识快速定位数据"。
| 维度 | 单列集合(Collection) |
双列集合(Map) |
|---|---|---|
| 顶层接口 | Collection<E> |
Map<K, V> |
| 元素形式 | 单个对象(如 "Alice") |
键值对(如 "name" → "Alice") |
| 是否有序 | List 有序,Set 无序(除 LinkedHashSet) |
HashMap 无序,LinkedHashMap/TreeMap 有序 |
| 是否允许重复 | List 允许,Set 不允许 |
键不允许重复,值允许重复 |
| 是否允许 null | List/Set 一般允许(TreeSet 除外) |
视实现类而定(见下表) |
| 典型实现 | ArrayList, LinkedList, HashSet, TreeSet |
HashMap, LinkedHashMap, TreeMap |
| 访问方式 | 迭代器、索引(List)、增强 for | 通过 key 获取 value,或遍历 entrySet |
| 底层结构 | 数组、链表、红黑树、哈希表等 | 哈希表、红黑树、双向链表等 |
1.2 常见的API
Map是最顶层的接口类。


java
package com.lkbhua.Demo;
import java.util.HashMap;
import java.util.Map;
public class demo1 {
public static void main(String[] args) {
/*
V put(K key , V value) 添加元素
V remove(Object key) 根据键删除键值对元素
void clear() 移除所有的键值对元素
boolean containsKey(Object key) 判断集合是否包含指定的键
boolean containsValue(Object Value) 判断集合是否包含指定的键
boolean isEmpty() 判断集合是否为空
int size() 集合的长度,也就是集合中键值对的个数
*/
// 1、创建Map集合对象
Map<String,String> map = new HashMap<>();
// 2、添加元素
// V put(K key , V value) 添加元素
// put()细节:
// 添加/覆盖
// 在添加的时候,如果添加的键已经存在,那么会覆盖原来的值
// 并且将被覆盖的值进行返回。
// 在添加的时候,如果添加的键不存在,那么添加键值对元素
map.put("lkbHua","zengQ");
map.put("西红柿","鸡蛋");
map.put("豆浆","油条");
// 3、打印集合
System.out.println(map);
// 4、删除元素
// V remove(Object key)
String remove = map.remove("西红柿");
System.out.println(remove);
// 5、清空集合
// 没有返回值
map.clear();
// 6、判断是否包含
map.put("西红柿","鸡蛋");
boolean containsKey = map.containsKey("西红柿");
System.out.println(containsKey);
// 7、判断是否为空
boolean empty = map.isEmpty();
System.out.println(empty);
// 8、获取集合的长度
int size = map.size();
System.out.println(size);
}
}
1.3 Map集合的三种遍历方式
1.3.1 键找值
第一步:可以把所有的键都放到一个单列集合当中;
第二部:依次遍历每一个键;
第三步:通过get()方法依次得到每一个键所对应的值。

java
public static void main(String[] args) {
/*Map集合的遍历方式*/
// 1、创建Map集合
Map<String, String> map = new HashMap<>();
// 2、添加元素
map.put("001", "张三");
map.put("002", "李四");
map.put("003", "王五");
// 3、遍历方式一:键找值
// ① 获取所有的键,把这些键放到一个Set集合中
// Ctrl+Alt+V : 自动生成变量
Set<String> keySet = map.keySet();
// ② 遍历单列set集合,得到每一个键
// 增强for循环
for (String key : keySet) {
// ③ 通过键,获取值
String value = map.get(key);
System.out.println(key + "=" + value);
}
// 迭代器循环
Iterator<String> iterator = keySet.iterator();
while (iterator.hasNext()) {
String key = iterator.next();
String value = map.get(key);
System.out.println(key + "=" + value);
}
System.out.println("--------------------------------");
// 利用Lambda表达式
keySet.forEach(key -> {
String value = map.get(key);
System.out.println(key + "=" + value);
System.out.println("--------------------------------");
});
1.3.2 键值对
第一步:依次获取里面的每一个键值对对象;
第二步:通过getKey()方法获取里面的键;通过getValue()方法获取里面的值。

java
public static void main(String[] args) {
/*Map集合的遍历方式2------键值对*/
// 1、创建Map集合
Map<String, String> map = new HashMap<>();
// 2、添加键值对
map.put("张三", "001");
map.put("李四", "002");
map.put("老五", "003");
// 3、遍历方式2------通过键值对
// 3.1 Entry是Map里面的内部接口
Set<Map.Entry<String, String>> entrySet = map.entrySet();
// 3.2 遍历entrySet集合,去得到每一个键值对
// 增强for
for (Map.Entry<String, String> entry : entrySet) {
System.out.println(entry.getKey() + ":" + entry.getValue());
}
System.out.println("--------------------------------");
// 迭代器
Iterator<Map.Entry<String, String>> iterator = entrySet.iterator();
while(iterator.hasNext()){
Map.Entry<String, String> entry = iterator.next();
System.out.println(entry.getKey() + ":" + entry.getValue());
}
System.out.println("--------------------------------");
// Lambda
entrySet.forEach(entry -> {
System.out.println(entry.getKey() + ":" + entry.getValue());
});
System.out.println("--------------------------------");
}
1.3.3 Lambda表达式

java
public static void main(String[] args) {
/*Map集合的遍历方式3------Lambda*/
// 1、创建Map集合
Map<String, String> map = new HashMap<>();
// 2、添加元素
map.put("001", "张三");
map.put("002", "李四");
map.put("003", "王五");
// 3、遍历方式3------Lambda
map.forEach(new BiConsumer<String, String>() {
@Override
public void accept(String key, String value) {
System.out.println(key + ":" + value);
}
});
System.out.println("--------------------------------");
map.forEach((key,value)->System.out.println(key + ":" + value));
}
声明:
详细分析借鉴于通义AI
以上均来源于B站@ITheima的教学内容!!!
本人跟着视频内容学习,整理知识引用