学习笔记
Java 集合框架:一张图理清体系
2026-08-18 09:00
Java 基础集合
从 Collection 与 Map 两条主线梳理 List、Set、Queue、HashMap 等常用集合的定位。
Java 集合框架:一张图理清体系
来源:集合框架课程笔记 · 整理:婉萤
总览
Collection
├── List —— 有序、可重复:ArrayList / LinkedList
├── Set —— 无序、不可重复:HashSet / TreeSet
└── Queue —— 队列:LinkedList / PriorityQueue
Map —— 键值对:HashMap / TreeMap / Hashtable
三大接口怎么选
| 接口 | 特点 | 典型场景 | |---|---|---| | List | 按索引存取,元素可重复 | 保存一组有序数据、按位置访问 | | Set | 自动去重 | 标签集合、去重统计 | | Map | 键值映射,键唯一 | 缓存、计数(key → 次数) |
ArrayList vs LinkedList
- ArrayList:底层数组,查快增删慢(中间插入要整体搬移)
- LinkedList:底层双向链表,增删快查慢(按下标访问要遍历)
- 默认用 ArrayList,只有在频繁头尾增删时才考虑 LinkedList
三种遍历方式
// 1. 传统 for(List 专用,靠下标)
for (int i = 0; i < list.size(); i++) { ... }
// 2. 增强 for(最常用,遍历中不能修改集合)
for (String s : list) { ... }
// 3. 迭代器(唯一能在遍历中安全删除的方式)
Iterator<String> it = list.iterator();
while (it.hasNext()) {
String s = it.next();
if (shouldRemove(s)) it.remove(); // 而不是 list.remove(s)
}
高频踩坑
- 遍历中删除:增强 for 里直接
list.remove()会抛ConcurrentModificationException,必须用迭代器(部门管理系统实训里专门练过) - HashMap 遍历:
entrySet()比keySet()再 get 高效得多 - 自动装箱:
List<Integer>的remove(1)是按下标删,remove(Integer.valueOf(1))才是按值删