映射表(Map)
掌握 HashMap 的基本使用
理解 Map 的键值对结构
能实现 Map 的遍历与常用操作
核心讲解
Map 是键值对存储,一个键对应一个值,键不能重复,值可以重复。最常用的是 HashMap。
(1)常用方法
表格
方法 | 功能 |
|---|---|
| 添加 / 修改键值对 |
| 根据键获取值,不存在返回 null |
| 删除键值对 |
| 是否包含指定键 |
| 获取键值对数量 |
| 清空 |
(2)三种遍历方式
遍历键:
keySet()遍历值:
values()遍历键值对:
entrySet(),效率最高
(3)HashMap 特点
无序,存取顺序不一致
键和值都可以为 null
线程不安全,效率高
底层:哈希表
(4)其他实现
LinkedHashMap:有序,插入顺序TreeMap:排序,按 key 排序Hashtable:线程安全,老的,不推荐
代码示例
import java.util.HashMap;
import java.util.Map;
public class MapDemo {
public static void main(String[] args) {
// 创建Map
Map<String, Integer> scoreMap = new HashMap<>();
// 添加数据
scoreMap.put("张三", 90);
scoreMap.put("李四", 85);
scoreMap.put("王五", 95);
scoreMap.put("张三", 92); // 键重复会覆盖
System.out.println("大小:" + scoreMap.size());
System.out.println("张三的分数:" + scoreMap.get("张三"));
System.out.println("是否包含赵六:" + scoreMap.containsKey("赵六"));
// 遍历1:遍历键
System.out.println("\n遍历键:");
for (String name : scoreMap.keySet()) {
System.out.println(name + ":" + scoreMap.get(name));
}
// 遍历2:遍历键值对(推荐)
System.out.println("\n遍历键值对:");
for (Map.Entry<String, Integer> entry : scoreMap.entrySet()) {
System.out.println(entry.getKey() + " -> " + entry.getValue());
}
// 删除
scoreMap.remove("李四");
System.out.println("\n删除后大小:" + scoreMap.size());
// getOrDefault
int score = scoreMap.getOrDefault("赵六", 0);
System.out.println("赵六的分数(默认0):" + score);
}
}
常见误区
键重复会报错:键重复不会报错,会覆盖旧的值
用 get 判断存在:不能用 get!=null 判断,因为值本身可以是 null,要用 containsKey
遍历的时候删除:遍历的时候直接 remove 会报并发修改异常,要用迭代器
HashMap 是有序的:HashMap 是无序的,要有序用 LinkedHashMap
课后练习
创建一个 Map 存储 3 个学生的姓名和年龄
修改其中一个人的年龄,删除一个人
用 entrySet 遍历所有键值对输出
统计一个字符串中每个字符出现的次数

