collection是java单列集合顶层接口,不能直接实例化,是list和set的共同父接口;arraylist适合读多写少、按索引快速访问;linkedlist适合首尾频繁增删;hashset基于哈希表实现去重且查找快但无序;treeset基于红黑树实现有序唯一集合。

Collection 是 Java 单列集合的顶层接口,本身不能直接实例化,但它是 List 和 Set 的共同父接口,所有具体集合类都围绕它展开。掌握它的常用实现类,关键在于理解“用什么、为什么、怎么用”——不是死记类名,而是按场景选型。
ArrayList:需要按顺序存取、频繁查元素时首选
底层是动态数组,支持通过索引快速访问(O(1)),适合读多写少的场景。插入或删除中间位置元素时需移动后续元素,性能略低(O(n))。
- 初始化:List
list = new ArrayList(); - 添加重复元素没问题:list.add("a"); list.add("a"); // 允许
- 查第 2 个元素:String s = list.get(1); // 索引从 0 开始
- 注意:非线程安全,多线程环境下需手动同步或改用 CopyOnWriteArrayList
LinkedList:频繁在首尾增删、不常随机访问时更合适
底层是双向链表,头尾插入/删除是 O(1),但按索引查找是 O(n),因为要逐个遍历节点。
- 适合做栈或队列:list.addFirst("x"); list.removeLast();
- 和 ArrayList 一样允许重复、保持插入顺序
- 内存开销略大(每个元素额外存前后指针),一般不作为默认 List 使用
HashSet:只要去重、不关心顺序、查得快
基于哈希表实现,add / contains / remove 平均时间复杂度为 O(1),但元素无序,且要求元素正确重写 hashCode() 和 equals()。
- 初始化:Set
set = new HashSet(); - 自动过滤重复:set.add(5); set.add(5); // 第二个无效
- 不能保证遍历顺序,也不记录插入顺序
- 如果需要插入顺序,请用 LinkedHashSet
TreeSet:既要唯一性,又要自然排序或自定义排序
底层是红黑树,元素自动按升序排列(或按 Comparator 排序),add / contains / remove 时间复杂度为 O(log n)。
- 支持自然排序(元素实现 Comparable)或传入 Comparator:new TreeSet(Comparator.reverseOrder())
- 不允许 null(除非显式指定可比较 null 的 Comparator)
- 遍历时元素天然有序,适合需要范围查询或找最大/最小值的场景
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











