← 返回笔记

学习笔记

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)) 才是按