别把集合当万能容器,先认清你的能力缺口在哪

很多写过几天 Java 的人,总觉得自己会用集合了,不就是 new ArrayList() 然后 add 和 get 吗?但真到写代码时,泛型通配符的上下界搞不清,? extends T 和 ? super T 什么时候用完全靠蒙;让你解释 ArrayList 和 LinkedList 在头插、随机访问时的性能差异,只能背两句概念,根本说不出底层扩容和双向链表的具体逻辑。这门课解决的就是这种“半懂不懂”的问题。它不讲基础语法,直接针对泛型机制和常用 List 实现的底层逻辑进行专项补漏。如果你的基础还停留在写不出完整的类定义,建议先去补面向对象的基础;但如果你能独立写类、调接口,却总在集合操作和类型转换上踩坑,那这正好是你需要查漏补缺的地方。

建议先死磕泛型,再吃透 List 的底层差异

看这套资料不要按顺序泛泛而过,建议分两步走。第一步死磕泛型,重点看泛型概念、使用以及通配符这三块。不要只看视频,跟着把带有泛型的类、方法定义自己敲一遍,重点理解类型擦除带来的限制,把“为什么通配符要分上限和下限”彻底想透,别假装看一眼就懂了。第二步是对比学习 List 体系。重点对比 ArrayList 和 LinkedList 的源码逻辑,搞懂前者的数组扩容机制和后者的节点指针操作。资料里附带的使用练习必须亲手做完,不要直接看答案。遍历方式那一块同样不能跳,迭代器、增强 for、普通 for 在不同的 List 结构下性能表现完全不同,自己写个测试类打印一下耗时,比听别人讲十遍都管用。另外 Vector 和 Stack 作为补充了解即可,明白它们是线程安全的历史遗留产物,知道现在的工程里为什么很少用就行了。

学完能独立做什么,以及资料怎么配合练习

学完这套资料,你应该能独立完成几件具体的事:能自定义带泛型的类和方法,在业务代码中彻底消除强制类型转换的隐患;能根据具体的业务场景(比如读多写少、频繁头插尾插)准确选用 ArrayList 还是 LinkedList,并说出性能依据;能熟练使用迭代器在遍历的同时安全地删除元素,而不是一边遍历一边修改集合导致抛出异常。资料配合练习的方法很直接:先看泛型部分的理论,看完立刻关掉视频,自己写一个支持泛型的自定义缓存类,限定只能存取特定类型的对象。看 ArrayList 和 LinkedList 时,不要只用默认的几个元素,自己往里塞十万个随机数据,分别测试在头部、中间、尾部插入和删除的耗时差异。最后把资料里的遍历方式总结成一个自己的工具类,把不同遍历方式的适用场景写在注释里。查漏补缺不是看一遍视频就完事,自己敲出来的代码和跑出来的性能数据,才是你真正补上的能力。

课程目录

1 泛型的概念和好处 (13:57)
2 泛型的使用 (31:29)
3 泛型中通配符的使用 (11:19)
4 ArrayList的使用 (32:48)
5 ArrayList的使用练习 (19:51)
6 LinkedList的使用 (27:16)
7 Vector和Stack的使用 (08:34)
8 集合的遍历方式 (43:06)