教程目录
ArrayList 和 LinkedList 的区别?
一、底层结构 ArrayList:基于动态数组,连续内存存储。 LinkedList:基于双向链表,节点分散存储。 二、性能对比 操作 ArrayList LinkedList 随机访问 O(1) O(n) 尾部追加 O(1)(均摊) O(1) 中间插入/删除 O(n)(需移动元素) O(1)(定位
HashMap 的底层实现原理?
一、数据结构 JDK 1.8 后 HashMap = 数组 + 链表 + 红黑树。 数组是主体,通过 (n-1) & hash 定位桶。 哈希冲突时,同桶元素挂成链表。 链表长度 ≥ 8 且数组长度 ≥ 64 时,链表转红黑树;节点数 ≤ 6 时转回链表。 二、put 流程 计算 key 的 has
ConcurrentHashMap 如何保证线程安全?
一、JDK 1.7:分段锁 内部是 Segment 数组,每个 Segment 是一个小 HashMap,put 时只锁当前 Segment,并发度 = Segment 数(默认 16)。 二、JDK 1.8:CAS + synchronized 数组节点为空时,用 CAS 插入,无锁。 节点不为空
HashSet 和 TreeSet 的区别?
一、底层实现 HashSet:内部是 HashMap,元素作为 HashMap 的 key,value 是固定 Object。 TreeSet:内部是 TreeMap,基于红黑树。 二、对比 维度 HashSet TreeSet 有序性 无序 自然排序或定制排序 元素要求 重写 equals/has
什么是 fail-fast 机制?
一、定义 在用迭代器遍历集合时,如果集合结构被修改(增/删),迭代器会立即抛出 ConcurrentModificationException,这就是 fail-fast。 二、实现原理 集合内部维护 modCount 记录结构修改次数。迭代器创建时记录 expectedModCount = mod