关于一些集合的底层数据结构

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锁单个桶(链表头节点或红黑树根节点)。
posted @ 2025-04-13 15:02  留梦&  阅读(12)  评论(0)    收藏  举报