下一篇:List 与 ArrayList · 面试:集合面试 52 道
背景与动机
数组长度固定;业务里更需要动态增删、去重、排序和键值映射——这些交给集合框架(java.util)。
先记一句总纲:
- Collection 体系:单个元素(
List/Set/Queue) - Map 体系:键值对(与
Collection并列,不是子接口)
专题导航
| 顺序 | 笔记 | 内容 |
|---|---|---|
| 1 | 本篇 | 框架结构、工具类、选型 |
| 2 | List | ArrayList、LinkedList、扩容 |
| 3 | Set | HashSet、LinkedHashSet、TreeSet |
| 4 | Queue | ArrayDeque、PriorityQueue |
| 5 | HashMap | 结构、put、扩容 |
| 6 | ConcurrentHashMap | 并发 Map |
| 7 | 迭代与陷阱 | Iterator、排序、常见坑 |
核心原理
Collection 框架结构
java.util├─ Iterable → Collection│ ├─ List → ArrayList, LinkedList, Vector│ ├─ Set → HashSet, LinkedHashSet, TreeSet│ └─ Queue/Deque → ArrayDeque, PriorityQueue, LinkedList├─ Map → HashMap, LinkedHashMap, TreeMap, ConcurrentHashMap└─ Collections → sort, synchronizedList, unmodifiableXxx(工具类)学习时先分清:接口层次 vs Collections 工具类。
Collection 和 Collections 的区别
| Collection | Collections | |
|---|---|---|
| 角色 | 接口,List/Set/Queue 的根 | 工具类,静态方法操作集合 |
| 例子 | Collection<String> c = new ArrayList<>() | Collections.sort(list) |
常见集合怎么选
| 需求 | 优先实现 |
|---|---|
| 有序、可重复列表 | ArrayList |
| 去重 | HashSet |
| 去重 + 插入顺序 | LinkedHashSet / LinkedHashMap |
| 去重或键排序 | TreeSet / TreeMap |
| 队列、栈 | ArrayDeque |
| 并发键值 | ConcurrentHashMap |
面向接口声明变量
List<String> list = new ArrayList<>();Set<String> set = new HashSet<>();Map<String, Integer> map = new HashMap<>();左边用接口,右边用实现类,便于替换实现。
遍历入门
Collection / List:
for (String name : names) { System.out.println(name);}Map 用 entrySet:
for (Map.Entry<String, Integer> e : scores.entrySet()) { System.out.println(e.getKey() + "=" + e.getValue());}迭代器、fail-fast、安全删除见 迭代与陷阱。
一句话总结
集合先按问题分类(List/Set/Queue/Map),再选实现类;默认 ArrayList + HashSet + HashMap,有特殊需求再换 Linked*、Tree*、Concurrent*。