Prechádzať zdrojové kódy

docs: 更新20260803课堂笔记及README,同步代码变更——新增集合工具类Collections知识点(Demo02:sort/reverse/binarySearch/max/min/unmodifiableList/shuffle/fill/swap/rotate/replaceAll+List.of)并补充随堂练习与拓展阅读

WanJL 3 týždňov pred
rodič
commit
bfa138f062

+ 2 - 2
README.md

@@ -37,7 +37,7 @@
 | 2026-07-29 | [包装类(Wrapper Classes)+ 集合框架入门(Collection Framework)+ 泛型(Generics):基本类型与包装类对应关系、装箱与拆箱、自动装箱/拆箱、包装类优势、缓存机制、Bean 类应用;集合 vs 数组、体系结构(Collection/List/Set/Map)、线性表数据结构(栈/队列/数组/链表)、ArrayList 底层实现详解(默认容量10、扩容机制、三个构造方法、size vs capacity、trimToSize/ensureCapacity/grow 1.5倍扩容公式、位运算符 >> <<)、ArrayList 常用方法速查;泛型概念与好处、泛型定义格式、通配符 ? / ? extends T、自定义泛型类、有界类型参数、练习参考答案(Student toString/equals/hashCode、泛型 vs 原始类型)](./课堂笔记/01-JavaSE基础-笔记/20260729-笔记.md) |
 | 2026-07-29 | [包装类(Wrapper Classes)+ 集合框架入门(Collection Framework)+ 泛型(Generics):基本类型与包装类对应关系、装箱与拆箱、自动装箱/拆箱、包装类优势、缓存机制、Bean 类应用;集合 vs 数组、体系结构(Collection/List/Set/Map)、线性表数据结构(栈/队列/数组/链表)、ArrayList 底层实现详解(默认容量10、扩容机制、三个构造方法、size vs capacity、trimToSize/ensureCapacity/grow 1.5倍扩容公式、位运算符 >> <<)、ArrayList 常用方法速查;泛型概念与好处、泛型定义格式、通配符 ? / ? extends T、自定义泛型类、有界类型参数、练习参考答案(Student toString/equals/hashCode、泛型 vs 原始类型)](./课堂笔记/01-JavaSE基础-笔记/20260729-笔记.md) |
 | 2026-07-30 | [List.of / LinkedList / 自定义链表 / ArrayList 练习](./课堂笔记/01-JavaSE基础-笔记/20260730-笔记.md) |
 | 2026-07-30 | [List.of / LinkedList / 自定义链表 / ArrayList 练习](./课堂笔记/01-JavaSE基础-笔记/20260730-笔记.md) |
 | 2026-07-31 | [LinkedList 多接口形态(List/Queue/Deque)+ Iterator 迭代器 + Map集合(入门/遍历/底层原理)+ 二叉树(二叉搜索树/平衡二叉树/红黑树)](./课堂笔记/01-JavaSE基础-笔记/20260731-笔记.md) |
 | 2026-07-31 | [LinkedList 多接口形态(List/Queue/Deque)+ Iterator 迭代器 + Map集合(入门/遍历/底层原理)+ 二叉树(二叉搜索树/平衡二叉树/红黑树)](./课堂笔记/01-JavaSE基础-笔记/20260731-笔记.md) |
-| 2026-08-03 | [比较器排序:Comparable 自然排序 / Comparator 比较器排序 + 20260731 课后作业解析(Map 操作与遍历、异常处理综合、匿名内部类 Comparator 排序)](./课堂笔记/01-JavaSE基础-笔记/20260803-笔记.md) |
+| 2026-08-03 | [比较器排序:Comparable 自然排序 / Comparator 比较器排序 + 集合工具类 Collections + 20260731 课后作业解析(Map 操作与遍历、异常处理综合、匿名内部类 Comparator 排序)](./课堂笔记/01-JavaSE基础-笔记/20260803-笔记.md) |
 
 
 ## 二、授课代码
 ## 二、授课代码
 
 
@@ -61,7 +61,7 @@
 | 2026-07-29 | 包装类 + 集合框架入门 + 泛型(Generics):装箱/拆箱、自动装箱/拆箱、包装类在 Bean 中的应用;集合 vs 数组、体系结构、线性表数据结构、ArrayList 底层实现详解(默认容量10、扩容机制、三个构造方法、size vs capacity、trimToSize/ensureCapacity/grow 1.5倍扩容公式、位移运算符)、ArrayList 常用方法速查;泛型概念与好处、定义格式、通配符、自定义泛型类、有界类型参数、练习参考答案(Student 类重写 toString/equals/hashCode、泛型 vs 原始类型) | `c260729` | [`course/packaging`](./授课代码/c260729/src/course/packaging/) / [`course/collection`](./授课代码/c260729/src/course/collection/) / [`exercises/exercise01`](./授课代码/c260729/src/exericse/exericse01/) / [`exercises/exercise02`](./授课代码/c260729/src/exericse/exericse02/) |
 | 2026-07-29 | 包装类 + 集合框架入门 + 泛型(Generics):装箱/拆箱、自动装箱/拆箱、包装类在 Bean 中的应用;集合 vs 数组、体系结构、线性表数据结构、ArrayList 底层实现详解(默认容量10、扩容机制、三个构造方法、size vs capacity、trimToSize/ensureCapacity/grow 1.5倍扩容公式、位移运算符)、ArrayList 常用方法速查;泛型概念与好处、定义格式、通配符、自定义泛型类、有界类型参数、练习参考答案(Student 类重写 toString/equals/hashCode、泛型 vs 原始类型) | `c260729` | [`course/packaging`](./授课代码/c260729/src/course/packaging/) / [`course/collection`](./授课代码/c260729/src/course/collection/) / [`exercises/exercise01`](./授课代码/c260729/src/exericse/exericse01/) / [`exercises/exercise02`](./授课代码/c260729/src/exericse/exericse02/) |
 | 2026-07-30 | List.of() 不可变集合 + LinkedList 双链表理论 + 手写单链表 MyLinked + Student 课程管理练习 (ArrayList 常用操作) + 课后作业回顾手写 MyArrayList | `c260730` | [`course`](./授课代码/c260730/src/course/) / [`exericse/exericse01`](./授课代码/c260730/src/exericse/exericse01/) / [`homework0729/p4`](./授课代码/c260730/src/homework0729/p4/) |
 | 2026-07-30 | List.of() 不可变集合 + LinkedList 双链表理论 + 手写单链表 MyLinked + Student 课程管理练习 (ArrayList 常用操作) + 课后作业回顾手写 MyArrayList | `c260730` | [`course`](./授课代码/c260730/src/course/) / [`exericse/exericse01`](./授课代码/c260730/src/exericse/exericse01/) / [`homework0729/p4`](./授课代码/c260730/src/homework0729/p4/) |
 | 2026-07-31 | LinkedList 多接口形态(List / Queue / Deque)+ Iterator 迭代器遍历(ArrayList/LinkedList 迭代器)+ Map集合:入门(HashMap:put/keySet/values/containsKey)、遍历(keySet+get / entrySet)、HashMap底层原理(数组+链表/红黑树、hashCode/equals、5个关键常量)+ 二叉树(二叉搜索树/平衡二叉树AVL/红黑树规则与旋转)+ 随堂练习参考解答(自定义Key/词频统计) | `c260731` | [`course`](./授课代码/c260731/src/course/) / [`exericse/exericse01`](./授课代码/c260731/src/exericse/exericse01/) / [`exericse/exericse02`](./授课代码/c260731/src/exericse/exericse02/) |
 | 2026-07-31 | LinkedList 多接口形态(List / Queue / Deque)+ Iterator 迭代器遍历(ArrayList/LinkedList 迭代器)+ Map集合:入门(HashMap:put/keySet/values/containsKey)、遍历(keySet+get / entrySet)、HashMap底层原理(数组+链表/红黑树、hashCode/equals、5个关键常量)+ 二叉树(二叉搜索树/平衡二叉树AVL/红黑树规则与旋转)+ 随堂练习参考解答(自定义Key/词频统计) | `c260731` | [`course`](./授课代码/c260731/src/course/) / [`exericse/exericse01`](./授课代码/c260731/src/exericse/exericse01/) / [`exericse/exericse02`](./授课代码/c260731/src/exericse/exericse02/) |
-| 2026-08-03 | 比较器排序:TreeSet/TreeMap 有序集合、Comparable 自然排序(course/Student implements Comparable、compareTo 按年龄二次比较姓名)、Comparator 比较器排序(course/Demo01:TreeSet 构造传入匿名内部类 Comparator);20260731 课后作业解析:Map 集合基本操作与遍历(homework0731/p2_map)、异常处理综合(homework0731/p4_exception:自定义异常 InvalidScoreException + 多 catch 块 + 输入校验)、匿名内部类 Comparator 排序(homework0731/p5_sort:Collections.sort 按年龄升序/成绩降序 Double.compare) | `c260803` | [`course`](./授课代码/c260803/src/course/) / [`homework0731/p2_map`](./授课代码/c260803/src/homework0731/p2_map/) / [`homework0731/p4_exception`](./授课代码/c260803/src/homework0731/p4_exception/) / [`homework0731/p5_sort`](./授课代码/c260803/src/homework0731/p5_sort/) |
+| 2026-08-03 | 比较器排序:TreeSet/TreeMap 有序集合、Comparable 自然排序(course/Student implements Comparable、compareTo 按年龄二次比较姓名)、Comparator 比较器排序(course/Demo01:TreeSet 构造传入匿名内部类 Comparator);集合工具类 Collections(course/Demo02:sort/sort+Comparator/reverse/binarySearch/max/min/unmodifiableList/shuffle/fill/swap/rotate/replaceAll + List.of 快速创建集合);20260731 课后作业解析:Map 集合基本操作与遍历(homework0731/p2_map)、异常处理综合(homework0731/p4_exception:自定义异常 InvalidScoreException + 多 catch 块 + 输入校验)、匿名内部类 Comparator 排序(homework0731/p5_sort:Collections.sort 按年龄升序/成绩降序 Double.compare) | `c260803` | [`course`](./授课代码/c260803/src/course/) / [`homework0731/p2_map`](./授课代码/c260803/src/homework0731/p2_map/) / [`homework0731/p4_exception`](./授课代码/c260803/src/homework0731/p4_exception/) / [`homework0731/p5_sort`](./授课代码/c260803/src/homework0731/p5_sort/) |
 
 
 ## 三、课堂练习题
 ## 三、课堂练习题
 
 

+ 65 - 0
授课代码/c260803/src/course/Demo02.java

@@ -0,0 +1,65 @@
+package course;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+/**
+ * @author WanJl
+ * @version 1.0
+ * @title Demo02
+ * @description 集合工具类 Collections
+ * @create 2026/8/3
+ */
+public class Demo02 {
+    /*
+        java.util.Collections 操作集合的工具类
+
+
+
+
+
+
+
+
+     */
+    public static void main(String[] args) {
+        List<String> list=new ArrayList<>(List.of("C","B","A","F","G"));
+
+
+        //排序
+        // 根据自然顺序,升序排序,要求每个元素都必须实现Comparable接口,重写comparTo()方法
+        Collections.sort(list); //直接排序
+        //对集合进行排序,使用自定义方式排序,使用Comparator类型的匿名内部类,重写compare方法
+        Collections.sort(list, new Comparator<String>() {
+            @Override
+            public int compare(String o1, String o2) {
+                return o1.compareTo(o2);
+            }
+        });
+        //逆序
+        Collections.reverse(list);
+
+        //查找--使用二分查找法进行查找指定元素。有的话返回元素索引值,没有就返回-1
+        int i = Collections.binarySearch(list, "C");
+        //查找最大元素
+        String max = Collections.max(list);
+        //查找最小元素
+        String min = Collections.min(list);
+
+        //把当前集合转化为不可变集合
+        List<String> unmodifiableList = Collections.unmodifiableList(list);
+
+        //随机打乱集合元素
+        Collections.shuffle(list);
+        //使用某个对象全部填充元素
+        Collections.fill(list,"X");
+        //交换元素
+        Collections.swap(list,0,1);
+        //旋转元素
+        Collections.rotate(list,2);
+        //替换指定的元素
+        Collections.replaceAll(list,"A","Z");
+    }
+}

+ 133 - 12
课堂笔记/01-JavaSE基础-笔记/20260803-笔记.md

@@ -1,4 +1,4 @@
-# 20260803 课堂笔记 — 比较器排序(Comparable 自然排序 / Comparator 比较器排序)+ 20260731 课后作业解析
+# 20260803 课堂笔记 — 比较器排序(Comparable 自然排序 / Comparator 比较器排序)+ 集合工具类 Collections + 20260731 课后作业解析
 
 
 - **日期**:2026-08-03
 - **日期**:2026-08-03
 - **项目**:`c260803`
 - **项目**:`c260803`
@@ -13,11 +13,12 @@
 2. [自然排序 Comparable(实体类内建排序规则)](#2-自然排序-comparable实体类内建排序规则)
 2. [自然排序 Comparable(实体类内建排序规则)](#2-自然排序-comparable实体类内建排序规则)
 3. [比较器排序 Comparator(临时自定义排序)](#3-比较器排序-comparator临时自定义排序)
 3. [比较器排序 Comparator(临时自定义排序)](#3-比较器排序-comparator临时自定义排序)
 4. [返回值规则与 compareTo/equals 一致性的官方推荐](#4-返回值规则与-comparetoequals-一致性的官方推荐)
 4. [返回值规则与 compareTo/equals 一致性的官方推荐](#4-返回值规则与-comparetoequals-一致性的官方推荐)
-5. [20260731 课后作业解析:Map 集合基本操作与遍历](#5-20260731-课后作业解析map-集合基本操作与遍历)
-6. [20260731 课后作业解析:异常处理综合(自定义异常)](#6-20260731-课后作业解析异常处理综合自定义异常)
-7. [20260731 课后作业解析:匿名内部类 Comparator 排序](#7-20260731-课后作业解析匿名内部类-comparator-排序)
-8. [随堂练习要点](#8-随堂练习要点)
-9. [拓展阅读](#9-拓展阅读)
+5. [集合工具类 Collections](#5-集合工具类-collections)
+6. [20260731 课后作业解析:Map 集合基本操作与遍历](#6-20260731-课后作业解析map-集合基本操作与遍历)
+7. [20260731 课后作业解析:异常处理综合(自定义异常)](#7-20260731-课后作业解析异常处理综合自定义异常)
+8. [20260731 课后作业解析:匿名内部类 Comparator 排序](#8-20260731-课后作业解析匿名内部类-comparator-排序)
+9. [随堂练习要点](#9-随堂练习要点)
+10. [拓展阅读](#10-拓展阅读)
 
 
 ---
 ---
 
 
@@ -189,7 +190,108 @@ for (Student s : treeSet) {
 
 
 ---
 ---
 
 
-## 5. 20260731 课后作业解析:Map 集合基本操作与遍历
+## 5. 集合工具类 Collections
+
+### 概念
+
+`java.util.Collections` 是**操作集合的工具类**,专门用来对 `List` / `Set` / `Map` 等集合进行排序、查找、填充、转换等操作。
+
+- 工具类里的方法**全部是静态方法**,**不需要创建对象**,直接通过类名调用
+- 类比记忆:`Arrays` 是**数组**的工具类,`Collections` 就是**集合**的工具类
+- 今天重点:`Collections.sort` 是**比较器排序**在 List 上的应用——传入 `Comparator` 匿名内部类即可对 List 自定义排序(与 TreeSet 构造传 Comparator 思路一致)
+
+### 快速创建集合:List.of()
+
+```java
+// 来源:course/Demo02.java(部分)
+// List.of() 是 JDK9+ 提供的快速创建【不可变集合】的方法
+// 再用 new ArrayList<>(...) 包装成可变的 ArrayList
+List<String> list = new ArrayList<>(List.of("C", "B", "A", "F", "G"));
+```
+
+### 代码示例(Collections 常用方法)
+
+```java
+// 来源:course/Demo02.java
+package course;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+public class Demo02 {
+    public static void main(String[] args) {
+        List<String> list = new ArrayList<>(List.of("C", "B", "A", "F", "G"));
+
+        // 1. 排序:自然顺序升序——要求每个元素都必须实现 Comparable 接口,重写 compareTo()
+        Collections.sort(list);
+
+        // 2. 排序:自定义方式排序——Comparator 匿名内部类,重写 compare()
+        Collections.sort(list, new Comparator<String>() {
+            @Override
+            public int compare(String o1, String o2) {
+                return o1.compareTo(o2);
+            }
+        });
+
+        // 3. 逆序:把集合元素顺序反转
+        Collections.reverse(list);
+
+        // 4. 查找:二分查找指定元素,存在返回索引,不存在返回 -1
+        int i = Collections.binarySearch(list, "C");
+
+        // 5. 查找最大 / 最小元素
+        String max = Collections.max(list);
+        String min = Collections.min(list);
+
+        // 6. 把当前集合转化为不可变集合(不能 add / remove)
+        List<String> unmodifiableList = Collections.unmodifiableList(list);
+
+        // 7. 随机打乱集合元素顺序
+        Collections.shuffle(list);
+
+        // 8. 使用某个对象全部填充元素
+        Collections.fill(list, "X");
+
+        // 9. 交换两个位置的元素
+        Collections.swap(list, 0, 1);
+
+        // 10. 旋转元素:整体向后移动 distance 个位置
+        Collections.rotate(list, 2);
+
+        // 11. 替换指定元素:把旧值全部换成新值
+        Collections.replaceAll(list, "A", "Z");
+    }
+}
+```
+
+### Collections 常用方法速查
+
+| 方法 | 作用 | 说明 |
+|------|------|------|
+| `sort(List)` | 自然升序排序 | 元素**必须实现 Comparable**,否则抛 ClassCastException |
+| `sort(List, Comparator)` | 自定义排序 | 与 TreeSet(Comparator) 思路一致,按 compare 返回值排 |
+| `reverse(List)` | 逆序 | 把集合元素顺序整体反转 |
+| `binarySearch(List, key)` | 二分查找 | 返回元素索引,不存在返回 -1;**查找前必须先排序** |
+| `max(List)` / `min(List)` | 最大 / 最小元素 | 元素须可比较(实现 Comparable) |
+| `unmodifiableList(List)` | 转不可变集合 | 返回的集合不能增删改,否则抛 UnsupportedOperationException |
+| `shuffle(List)` | 随机打乱 | 类似洗牌 |
+| `fill(List, obj)` | 全部填充 | 用指定对象替换集合中所有元素 |
+| `swap(List, i, j)` | 交换元素 | 交换两个索引位置的元素 |
+| `rotate(List, distance)` | 旋转元素 | 元素整体向后移动 distance 个位置 |
+| `replaceAll(List, oldVal, newVal)` | 替换元素 | 把所有 oldVal 替换为 newVal |
+
+### 关键理解
+
+1. **Collections 与比较器的关系**:`Collections.sort(list, comparator)` 把**比较器排序**从「集合存入时」扩展到了「已有 List 排序」——二者共用同一套返回值规则(负数存左 / 0 相等 / 正数存右)。
+2. **`sort(List)` 的前提**:自然排序要求元素实现 `Comparable`,否则运行时报 `ClassCastException`——与 TreeSet/TreeMap 存入对象的要求**完全一致**。
+3. **`binarySearch` 使用前提**:二分查找基于有序数组,所以**查找前必须先 sort**,否则结果不可靠;找不到返回 -1。
+4. **`List.of()` 的陷阱**:返回的是**不可变集合**,直接 `add`/`remove` 会抛 `UnsupportedOperationException`;Demo02 用 `new ArrayList<>(List.of(...))` 包装后才可变。
+
+---
+
+## 6. 20260731 课后作业解析:Map 集合基本操作与遍历
 
 
 ### 作业要求回顾
 ### 作业要求回顾
 
 
@@ -262,7 +364,7 @@ public class MapDemo {
 
 
 ---
 ---
 
 
-## 6. 20260731 课后作业解析:异常处理综合(自定义异常)
+## 7. 20260731 课后作业解析:异常处理综合(自定义异常)
 
 
 ### 作业要求回顾
 ### 作业要求回顾
 
 
@@ -337,7 +439,7 @@ public class ScoreStatisticsDemo {
 
 
 ---
 ---
 
 
-## 7. 20260731 课后作业解析:匿名内部类 Comparator 排序
+## 8. 20260731 课后作业解析:匿名内部类 Comparator 排序
 
 
 ### 作业要求回顾
 ### 作业要求回顾
 
 
@@ -419,7 +521,7 @@ public class Student {
 
 
 ---
 ---
 
 
-## 8. 随堂练习要点
+## 9. 随堂练习要点
 
 
 ### 练习一:自然排序(Comparable)与比较器排序(Comparator)对比
 ### 练习一:自然排序(Comparable)与比较器排序(Comparator)对比
 
 
@@ -466,9 +568,25 @@ public class Student {
 1. double 成绩比较为什么不用 `(int)(s1.getScore()-s2.getScore())`?—— double 相减可能有精度误差,强转 int 也不安全;`Double.compare` 是标准做法
 1. double 成绩比较为什么不用 `(int)(s1.getScore()-s2.getScore())`?—— double 相减可能有精度误差,强转 int 也不安全;`Double.compare` 是标准做法
 2. 降序为什么交换参数位置即可?—— compare 返回值符号取反,排序方向随之反转
 2. 降序为什么交换参数位置即可?—— compare 返回值符号取反,排序方向随之反转
 
 
+### 练习五:Collections 工具类常用方法
+
+**核心步骤**:
+1. 用 `new ArrayList<>(List.of("C","B","A","F","G"))` 快速创建可变 List
+2. `Collections.sort(list)` 自然排序 → 观察字母升序
+3. `Collections.sort(list, new Comparator<String>(){...})` 自定义排序(如降序)
+4. `Collections.reverse(list)` / `Collections.shuffle(list)` 观察顺序变化
+5. `Collections.binarySearch(list, "C")`(先排序再查找)、`Collections.max/min(list)`
+6. `Collections.unmodifiableList(list)` 转不可变集合后尝试 `add()`,观察异常
+7. `Collections.fill(list, "X")` / `Collections.swap(list, 0, 1)` / `Collections.replaceAll(list, "A", "Z")`
+
+**思考**:
+1. `Collections.sort(list)` 为什么要求元素实现 `Comparable`?不实现会怎样?—— 工具类内部要比较元素大小,不实现则运行时抛 `ClassCastException`
+2. `binarySearch` 查找前为什么要先排序?—— 二分查找基于有序序列,未排序结果不可靠
+3. `List.of()` 返回的集合为什么不能 `add/remove`?—— 返回的是不可变集合,直接修改抛 `UnsupportedOperationException`,需用 `new ArrayList<>(...)` 包装
+
 ---
 ---
 
 
-## 9. 拓展阅读
+## 10. 拓展阅读
 
 
 ### 官方文档
 ### 官方文档
 
 
@@ -476,7 +594,8 @@ public class Student {
 - [Comparator 接口 (JDK 17)](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Comparator.html)
 - [Comparator 接口 (JDK 17)](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Comparator.html)
 - [TreeSet (JDK 17)](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/TreeSet.html)
 - [TreeSet (JDK 17)](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/TreeSet.html)
 - [TreeMap (JDK 17)](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/TreeMap.html)
 - [TreeMap (JDK 17)](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/TreeMap.html)
-- [Collections.sort() (JDK 17)](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Collections.html#sort(java.util.List,java.util.Comparator))
+- [Collections 工具类 (JDK 17)](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Collections.html)
+- [List.of() (JDK 17)](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/List.html#of())
 - [RuntimeException (JDK 17)](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/RuntimeException.html)
 - [RuntimeException (JDK 17)](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/RuntimeException.html)
 
 
 ### 推荐阅读
 ### 推荐阅读
@@ -493,3 +612,5 @@ public class Student {
 | 集合体系与泛型(0729) | TreeSet / TreeMap 有序集合 | 红黑树底层(0731 已讲) |
 | 集合体系与泛型(0729) | TreeSet / TreeMap 有序集合 | 红黑树底层(0731 已讲) |
 | HashMap 基本操作(0731) | Map 综合练习(keySet/entrySet 遍历) | Map 与 Set 的互转、分组统计 |
 | HashMap 基本操作(0731) | Map 综合练习(keySet/entrySet 遍历) | Map 与 Set 的互转、分组统计 |
 | 异常处理(0728) | 自定义异常 + 多 catch 块 | 异常链、try-with-resources |
 | 异常处理(0728) | 自定义异常 + 多 catch 块 | 异常链、try-with-resources |
+| Arrays 工具类(0716) | Collections 集合工具类 | Stream API、Java 8 新特性 |
+| Comparator 比较器排序(本节 3) | Collections.sort(list, comparator) | 函数式接口 & Lambda 简化比较器 |