java集合基础必备
路线
第 1 阶段:基础必备
- Collection 接口通用方法
- add、remove、clear、contains、size、isEmpty、iterator
- Iterator 迭代器
- 遍历集合的标准方式
- 增强 for 循环
- List 家族(最重要)
- ArrayList(动态数组)
- LinkedList(双向链表)
- 二者区别、使用场景、底层原理
- Set 家族
- HashSet(哈希表)
- LinkedHashSet(有序)
- TreeSet(可排序)
- 去重原理:hashCode () + equals ()
第 2 阶段:Map 集合
- HashMap
- 底层结构:数组 + 链表 + 红黑树
- 哈希冲突
- put/get 原理
- 扩容机制
- LinkedHashMap
- 保留插入顺序
- TreeMap
- 可排序
- HashMap vs Hashtable vs ConcurrentHashMap
第 3 阶段:进阶知识
- 集合底层数据结构
- ArrayList:数组
- LinkedList:双向链表
- HashMap:数组 + 链表 + 红黑树
- HashSet:包装 HashMap
- 线程安全问题
- 哪些集合线程不安全?
- 如何变成安全?
- CopyOnWriteArrayList
- 比较器
- Comparable
- Comparator
- Stream 流(Java 8+)
- 集合过滤、排序、聚合、分组
一、Collection 核心通用方法(所有单列集合都能用)
核心方法清单
add(E e):添加单个元素remove(Object o):删除指定元素clear():清空所有元素contains(Object o):判断是否包含元素size():获取集合元素个数isEmpty():判断集合是否为空iterator():获取迭代器
基础示例代码
1 | |
二、Iterator 迭代器 + 增强 for
1. 迭代器核心作用
集合通用遍历方式,统一所有单列集合遍历规则,支持遍历中安全删除元素。
核心三步:
iterator()获取迭代器hasNext()判断是否有下一个元素next()获取下一个元素
迭代器代码示例
1 | |
2. 增强 for 循环
- 底层:本质就是迭代器,语法简化
- 限制:遍历过程中不能增删元素,会触发并发修改异常
1 | |
关键考点
- 并发修改异常:
ConcurrentModificationException - 增强 for 适合纯遍历,迭代器适合需要删除元素的场景
三、List 家族(有序、可重复、有索引)
共性特点
- 存入顺序 = 取出顺序(有序)
- 元素可重复
- 拥有索引,支持根据索引增删改查
1. ArrayList
- 底层:动态扩容数组
- 优点:查询、遍历极快(随机访问)
- 缺点:增删元素需要移动数组,效率低
- 默认初始容量:10,扩容机制:原容量 1.5 倍
2. LinkedList
- 底层:双向链表
- 优点:首尾增删元素效率极高,无需移动数据
- 缺点:随机查询慢,需要从头 / 尾逐个遍历
- 额外实现了
Deque,可做栈、队列使用
3. 核心区别 & 使用场景
| 集合 | 底层 | 查询 | 增删 | 适用场景 |
|---|---|---|---|---|
| ArrayList | 动态数组 | 快 | 慢 | 大量查询、遍历 |
| LinkedList | 双向链表 | 慢 | 快 | 频繁增删、头尾操作 |
四、Set 家族(无序 / 唯一、不可重复、无普通索引)
共性特点
- 元素不可重复
- 无索引,不能通过下标获取元素
- 只能用迭代器 / 增强 for 遍历
1. HashSet
- 底层:HashMap 哈希表
- 特点:无序、去重、存取速度快
- 去重核心规则:
- 先调用
hashCode()计算哈希值 - 哈希值不同 → 直接判定为不同元素
- 哈希值相同 → 再调用
equals()比较内容 - 两者都相同 → 判定重复,拒绝存入
- 先调用
2. LinkedHashSet
- 底层:哈希表 + 双向链表
- 特点:去重 + 保留插入顺序
- 适用:需要去重,又要保证顺序的场景
3. TreeSet
- 底层:红黑树
- 特点:自动自然排序、去重
- 排序规则:
- 元素实现
Comparable接口(自然排序) - 或创建集合时传入
Comparator比较器
- 元素实现
Set 去重原理
自定义对象(实体类)想要 HashSet 去重,必须重写:hashCode() + equals()
只重写其中一个,无法实现完整去重。
1 | |
java集合基础必备
http://hanqichuan.com/2022/07/11/java集合/java集合基础必备/