集合源码解读
文章平均质量分 93
Dexu7
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【ArrayList】JDK1.8源码详细注释 以及如何实现线程安全的链表
逻辑上来说, 你迭代一次, 当然只能判断当前的对象是不是需要被删除, 干嘛要多次删除?其次, 这样也能让迭代器的代码逻辑更简洁, 避免很多边界条件的判断, 也能避免很多潜在的错误;如果是无参构造创建的ArrayList,首次添加第一个元素时,扩容到10,如果首次直接使用 addAll 添加集合c,会有特殊判断, 扩容到 max { c.length , 10 }原理是: 创建 COWIterator 的时候, 会将底层数组的引用传进入, 这样, 即使有其他线程更换了底层数组, 也不会影响到当前的迭代器;原创 2024-08-10 22:08:01 · 989 阅读 · 0 评论 -
【ConcurrentHashMap】JDK1.8版本源码解读与分析
HashTable 是早期的线程安全的哈希表, 但是锁的范围太大了, 其 put, get 方法都有 synchronized 关键字修饰, 锁的范围是 hashtable 对象, 并发度太低; JDK1.7 的 ConcurrentHashMap ( 以下简称为 CHM ), 锁的范围是一个段, 段的数量可以在构造的时候指定, 又称并发级别;原创 2024-08-10 21:33:21 · 1540 阅读 · 0 评论 -
【ConcurrentHashMap】JDK1.7版本源码解读与分析
底层是一个Segment[]数组, 每个Segment对象内部又有一个Entry[ ]数组, 一个Entry[]数组就相当于一个HashMapEntry[ ]采用拉链法解决冲突, 但是没有红黑树,红黑树是1.8才引入的;一个Segment对象就是一个段;当往容器中添加元素调用 put 方法时, 锁的粒度就是一个段;调用 put 方法时, 先计算应该放到Segment[ ]中的哪个段, 然后调用方法将 Entry 插入到,可以看出, 一次插入有两次散列,一次选择段, 一次选择段内的位置;原创 2024-08-09 21:02:53 · 1866 阅读 · 0 评论 -
[HashMap 源码详解] 阿里面经: 不要再说 hashCode 默认实现是取内存地址了, 必挂!
本文无废话, 全干货, 由 hashCode 方法开始讲起, 带你完全重新认识 hashCode 方法, 并囊括 HashMap 所有可能的八股文知识, 附带源码详细解读;然后将会讲解阿里面试问题, 进行知识提炼与提升, 希望大家都能认真看完;原创 2024-07-30 16:32:31 · 942 阅读 · 0 评论
分享