关于一些集合的底层数据结构
ArrayList:
基于动态数组实现,内存中是连续存储的。
- 支持快速随机访问(通过索引直接定位元素)。
- 默认初始容量为10,扩容时容量增长为原来的1.5倍(例如:10 → 15 → 22 → ...)。
LinkedList:
基于双向链表实现,元素分散在内存中,每个节点包含前驱和后继指针。
- 插入和删除操作高效(仅需调整指针)。
- 没有容量限制,但每个节点需要额外存储指针(内存开销更大)。
HashMap:
- JDK1.8之前:数组 + 链表(哈希冲突时用链表处理)。
- JDK1.8及之后:数组 + 链表/红黑树(链表长度≥8且数组长度≥64时,链表转为红黑树)。
HashSet:
- 基于HashMap,所有元素作为HashMap的Key存储,Value统一为 PRESENT(一个静态Object对象)。
Linked HashMap:
- 结构:继承
HashMap,在节点中维护双向链表,记录插入顺序或访问顺序。
Tree Map
- 结构:基于红黑树实现,Key按自然顺序或自定义比较器排序。
Concurrent HashMap
- JDK1.7:分段锁(Segment继承ReentrantLock)。
- JDK1.8:CAS + synchronized锁单个桶(链表头节点或红黑树根节点)。
浙公网安备 33010602011771号