集合框架
map、dequeue、iterator;对照 jva-collections。
35 分钟
集合框架
java-collections 已讲 List——本课深化 Map 语义、Deque 双端队列、Iterator 与 fail-fast,并对照 jva-collections 的 Set/Queue 选型。
学习目标
- 熟练使用 HashMap、LinkedHashMap、TreeMap 的差异
- 用 ArrayDeque 实现栈与队列
- 理解 Iterator 与并发修改异常
Map:键值查找
Map<String, Lesson> bySlug = new HashMap<>();
bySlug.put("jvc-types", new Lesson("jvc-types", "类型与变量"));
bySlug.putIfAbsent("jvc-types", other); // 不覆盖已有
for (Map.Entry<String, Lesson> e : bySlug.entrySet()) {
System.out.println(e.getKey() + " → " + e.getValue().title());
}
// JDK 8+ 便捷 API
bySlug.forEach((slug, lesson) -> System.out.println(slug));
| 实现 | 特点 |
|---|---|
HashMap | 无序,O(1) 均摊 get/put |
LinkedHashMap | 插入顺序或 access-order(LRU 缓存) |
TreeMap | 按 key 排序,Red-Black 树 |
键 必须正确实现 equals/hashCode;可变对象作 key 是 bug 温床。
Deque:队列与栈
Deque<String> queue = new ArrayDeque<>();
queue.offerLast("task-1");
queue.pollFirst(); // FIFO
Deque<String> stack = new ArrayDeque<>();
stack.push("a");
stack.pop(); // LIFO,等价 addFirst/removeFirst
优先 ArrayDeque 而非过时的 Stack 或作栈用的 LinkedList(见 jva-collections)。
Iterator 与 fail-fast
List<String> slugs = new ArrayList<>(List.of("a", "b", "c"));
Iterator<String> it = slugs.iterator();
while (it.hasNext()) {
String s = it.next();
if ("b".equals(s)) it.remove(); // 安全删除
}
// slugs.remove("b") 在 for-each 中会 ConcurrentModificationException
- fail-fast:迭代中结构被外部修改 → 快速失败
- 删除用
Iterator.remove()或removeIf - 并发场景用
ConcurrentHashMap等(见 jvc-concurrency)