查漏补缺:别让对象数组的内存图卡住你

这门课解决的核心问题,是很多写了几年增删改查的 Java 开发者依然存在的盲区:知道怎么调 ArrayList 的 add 和 remove,却说不清集合底层的继承体系,画不出对象数组在堆内存里的引用关系。适合那些语法基本过关、能独立写业务代码,但遇到集合扩容、迭代器并发修改报错就发懵的技术学习者。如果你连基本数据类型和引用数据类型都还没分清,建议先补完面向对象基础再来看。资料里开篇几节直接从对象数组的内存图切入,这是刻意安排的,不要跳过。很多人觉得集合难懂,根源在于脑子里没有内存模型,搞不清栈里的变量名和堆里的实体是怎么对应的。建议先看引用数据类型数组和对象数组内存图这两块,把引用指向堆内存的链路在纸上画一遍,再进入集合概述和继承体系,这样后面看 Collection 的成员方法时,你脑子里映射的是内存里的对象引用,而不是干巴巴的 API 文档。

配套练习:手写调用链路再对照源码

看这门课最大的忌讳就是只看不敲。资料里讲了 Collection 的成员方法使用,包括 add 方法返回值是什么这种容易被忽略的细节,你必须自己建个测试类,把每个方法都跑一遍,打印结果对照视频里的结论。具体做法是:看完 Collection 继承体系后,自己写一段代码,用 ArrayList 演示添加、删除、判断包含、遍历,每一步打印集合大小和元素内容。遇到 add 方法返回值这种知识点,别只记 boolean,自己写个判断条件试试返回 true 和 false 的场景。资料里的目录顺序是按认知梯度排的,从数组到集合的区别,再到继承体系,再到具体方法,你练习时也按这个顺序来,不要一上来就去折腾泛型或者多线程安全问题。每个小节看完,合上视频,凭记忆写出这节讲的核心 API 和它的行为特征,写不出来就回去重看,别假装会了。

学完能独立回答的几个问题

检验这门课有没有学透,不看笔记记了多少页,看你能不能脱稿回答这几个问题:数组和集合在内存分配和使用场景上的核心区别是什么?Collection 接口下面有哪些直接子接口,它们各自定义了什么行为契约?ArrayList 的 add 方法为什么返回 boolean,什么情况下会返回 false?Collection 的通用成员方法有哪些,哪些方法会改变集合大小,哪些不会?如果你能不查资料把这几个问题说清楚,并且能手写一段用 Collection 接口类型声明、ArrayList 实例化的代码,完成增删改查和遍历,说明这部分基础已经补到位了。接下来可以继续往 List 接口的特有方法、Set 的去重原理、Map 的键值对存储模型延伸,但那是后话,当前这一关先过扎实。资料配合练习的方式很简单:每个视频章节对应一段自己写的测试代码,代码跑通且你能解释每行输出,这节才算过。不要囤视频,看完一节练一节,缺口补一个少一个。

课程目录

1-1 [Java集合精讲] 引用数据类型数组 (21:40)
1-2 [Java集合精讲] 对象数组的内存图 (07:52)
1-3 [Java集合精讲] 集合概述 (04:22)
1-4 [Java集合精讲] 为什么会有集合 (05:09)
1-5 [Java集合精讲] 数组和集合的区别 (04:46)
1-6 [Java集合精讲] 集合的继承体系 (10:34)
1-7 [Java集合精讲] Collection概述及成员方法的使用 (14:49)
1-8 [Java集合精讲] Collection集合的成员方法使用 (06:32)
1-9 [Java集合精讲] ArrayList的add方法的返回值是什么 (04:34)
1-10 [Java集合精讲] Collection的其他的成员方法1 (09:41)
1-11 [Java集合精讲] Collection成员方法讲解 (09:56)
1-12 [Java集合精讲] 集合的遍历 (20:29)
1-13 [Java集合精讲] 迭代器的源码分析 (11:10)
1-14 [Java集合精讲] 遍历学生对象集合的练习 (17:42)
1-15 [Java集合精讲] 迭代器对象使用的注意事项 (06:19)
1-16 [Java集合精讲] List集合概述 (10:46)
1-17 [Java集合精讲] List集合的添加功能讲解 (07:37)
1-18 [Java集合精讲] List集合的删除和获取功能 (07:47)
1-19 [Java集合精讲] List集合的修改功能 (03:26)
1-20 [Java集合精讲] List集合的练习讲解 (06:23)
1-21 [Java集合精讲] List集合的独有遍历方式 (12:39)
1-22 [Java集合精讲] 使用ListIterator的注意事项 (05:18)
1-23 [Java集合精讲] 并发修改异常出现的原因 (08:00)
1-24 [Java集合精讲] 并发修改异常的两种解决方案 (07:44)
1-25 [Java集合精讲] List集合的练习之遍历学生对象 (04:59)
1-26 [Java集合精讲] List的子类的区别 (08:30)
1-27 [Java集合精讲] 栈的数据结构讲解 (06:50)
1-28 [Java集合精讲] 队列的数据结构 (03:21)
1-29 [Java集合精讲] 数组的数据结构 (16:52)
1-30 [Java集合精讲] 链表概述和分析 (08:52)
1-31 [Java集合精讲] 对链表执行添加元素操作 (09:06)
1-32 [Java集合精讲] 对链表执行查找和删除操作 (06:54)
1-33 [Java集合精讲] List接口的三个实现类的应用场景 (05:46)
1-34 [Java集合精讲] List集合子类的练习 (09:13)
1-35 [Java集合精讲] Vector独有的功能 (14:33)
1-36 [Java集合精讲] LinkedList独有的功能 (17:40)
1-37 [Java集合精讲] 栈的原理讲解 (08:41)
1-38 [Java集合精讲] 栈的创建和测试 (04:59)
1-39 [Java集合精讲] 栈的使用注意事项 (04:59)
1-40 [Java集合精讲] 队列的实现思路 (08:17)
1-41 [Java集合精讲] 练习去除List集合中重复的字符串 (14:00)
1-42 [Java集合精讲] 练习去除List集合中重复的字符串方式二 (10:24)
1-43 [Java集合精讲] 删除集合中重复字符串的注意事项 (15:35)
1-44 [Java集合精讲] 泛型的概念 (02:31)
1-45 [Java集合精讲] 泛型的由来 (11:07)
1-46 [Java集合精讲] 泛型的应用及好处 (11:40)
1-47 [Java集合精讲] 泛型的注意事项 (04:34)
1-48 [Java集合精讲] 泛型集合存储并遍历学生对象 (05:39)
1-49 [Java集合精讲] 泛型集合存储自定义学生对象并去重 (20:08)
1-50 [Java集合精讲] 泛型的应用场景 (03:06)
1-51 [Java集合精讲] 如何定义一个泛型类 (22:56)
1-52 [Java集合精讲] 泛型方法的定义 (09:16)
1-53 [Java集合精讲] 泛型方法的应用场景 (03:59)
1-54 [Java集合精讲] 定义泛型类、泛型方法的注意事项 (03:01)
1-55 [Java集合精讲] 泛型接口的定义 (03:43)
1-56 [Java集合精讲] 泛型接口的两种实现方式 (12:27)
1-57 [Java集合精讲] 泛型通配符的概念和种类 (04:12)
1-58 [Java集合精讲] 泛型通配符出现的原因 (15:55)
1-59 [Java集合精讲] 泛型通配符之向下限定 (07:46)
1-60 [Java集合精讲] 向上限定通配符 (06:39)
1-61 [Java集合精讲] 泛型高级知识 (19:54)
1-62 [Java集合精讲] 增强for循环的使用格式和演示 (09:16)
1-63 [Java集合精讲] 增强for的注意事项及底层原理 (05:41)
1-64 [Java集合精讲] 增强for练习 (04:20)
1-65 [Java集合精讲] 静态导入 (09:30)
1-66 [Java集合精讲] 可变形参的格式和本质 (12:49)
1-67 [Java集合精讲] 可变形参的注意事项 (06:25)
1-68 [Java集合精讲] 用Arrays的asList方法把数组转换成list集合 (09:18)
1-69 [Java集合精讲] 集合练习之嵌套遍历 (20:36)
1-70 [Java集合精讲] 集合练习之生成10个1到20之间的随机数 (12:08)
1-71 [Java集合精讲] 集合练习之求录入数据最大值的思路分析 (03:33)
1-72 [Java集合精讲] 集合练习之求录入数据最大值的代码实现 (12:28)
1-73 [Java集合精讲] Set集合概述 (09:19)
1-74 [Java集合精讲] Set集合和List集合添加null值的区别 (19:01)
1-75 [Java集合精讲] Set集合的去重原理推断 (10:10)
1-76 [Java集合精讲] Set集合的去重原理推断2 (10:58)
1-77 [Java集合精讲] HashSet的数据结构分析 (09:04)
1-78 [Java集合精讲] HashSet去重步骤分析讲解 (25:15)
1-79 [Java集合精讲] hashCodef方法的重写 (17:35)
1-80 [Java集合精讲] HashSet集合的练习 (08:35)
1-81 [Java集合精讲] LinkedHashSet集合概述 (09:58)
1-82 [Java集合精讲] TreeSet概述 (12:21)
1-83 [Java集合精讲] TreeSet集合的数据结构概述 (07:44)
1-84 [Java集合精讲] TreeSet集合的排序原理分析 (16:04)
1-85 [Java集合精讲] 自然排序的依据之comparable接口 (12:15)
1-86 [Java集合精讲] 自然排序的依据之comparable接口2 (16:50)
1-87 [Java集合精讲] 让对象实现Comparable接口的代码演示 (26:52)
1-88 [Java集合精讲] TreeSet集合用比较器对象进行比较排序 (19:54)
1-89 [Java集合精讲] HashSet集合的练习 (09:40)
1-90 [Java集合精讲] TreeSet集合练习的分析过程 (06:30)
1-91 [Java集合精讲] TreeSet集合练习的代码实现 (19:11)
1-92 [Java集合精讲] TreeSet集合的练习的注意事项 (15:14)
1-93 [Java集合精讲] 补充讲解TreeSet集合的比较器的局部内部类实现方式 (03:35)
1-94 [Java集合精讲] Map集合概述 (11:54)
1-95 [Java集合精讲] Map集合的继承体系 (12:32)
1-96 [Java集合精讲] Map集合的添加和修改功能 (14:48)
1-97 [Java集合精讲] Map集合的删除功能 (05:06)
1-98 [Java集合精讲] HashMap中如何判断添加的键和集合中的键一样 (05:25)
1-99 [Java集合精讲] HashMap的判断功能 (05:07)
1-100 [Java集合精讲] HashMap的获取功能 (06:42)
1-101 [Java集合精讲] Map的获取功能2及Map的遍历方式 (17:54)
1-102 [Java集合精讲] Map集合的第二种遍历方式 (05:10)
1-103 [Java集合精讲] HashMap的练习 (13:58)
1-104 [Java集合精讲] HashMap练习2 (07:45)
1-105 [Java集合精讲] HashMap练习3 (16:25)
1-106 [Java集合精讲] LinkedHashMap讲解 (09:29)
1-107 [Java集合精讲] TreeMap集合讲解 (14:04)
1-108 [Java集合精讲] TreeSet集合讲解2 (14:40)
1-109 [Java集合精讲] TreeMap集合3 (11:11)
1-110 [Java集合精讲] 集合的嵌套遍历练习 (15:05)
1-111 [Java集合精讲] 集合的嵌套遍历练习2 (14:14)
1-112 [Java集合精讲] 统计字符串中字符出现次数的思路分析 (10:19)
1-113 [Java集合精讲] 统计字符串中字符出现次数的代码实现 (15:56)
1-114 [Java集合精讲] Hashtable的讲解 (13:01)
1-115 [Java集合精讲] Collections概述及sort方法讲解 (11:16)
1-116 [Java集合精讲] Collections类的sort方法讲解 (08:44)
1-117 [Java集合精讲] Collections类的sort方法排序2 (08:38)
1-118 [Java集合精讲] Collections的二分查找 (06:28)
1-119 [Java集合精讲] Collections的二分查找2 (05:42)
1-120 [Java集合精讲] Collections求最大值 (03:49)
1-121 [Java集合精讲] Collections的反转和置换功能 (03:35)
1-122 [Java集合精讲] 集合总结 (15:38)