- 博客(7)
- 收藏
- 关注
原创 AQS中的判断p==head作用
final boolean acquireQueued(final Node node, int arg) { boolean failed = true; try { boolean interrupted = false; for (;;) { final Node p = node.predecessor(); 很多人不明白这里的判断是怎么回事,简单说一下
2021-10-13 14:24:01 442
原创 ConcurrentHashMap源码浅读JDK1.7
目录一、为什么要有ConcurrentHashMap二、存储结构三、源码分析1、ConcurrentHashMap成员变量2、Segment成员变量3、构造方法4、ConcurrentHashMap中的put方法4.1 创建Segment:ensureSegment(j)4.2 塞值时加锁失败:scanAndLockForPut(key, hash, value);4.3 向Segment中塞值:s.put(key, hash, value, false)4.4 扩容:rehash(node)一、为什么要
2021-08-05 11:21:09 260
原创 桶排序负数应该在那个桶
如果桶数是10,非负数是0-9,10-19…这种一组,而负数是-1…-10, -11…-20…这些是一组,如果-1~-10直接除以10,会被分到两组中,而不是-1这一组,所以先+1变成-0–9,与正数一致,再除以10,最后减1,才是正确的组...
2021-05-19 15:49:23 226
原创 JDK1.8 HashMap源码浅读
1、几个重要的属性DEFAULT_INITIAL_CAPACITY默认初始容量 /** * The default initial capacity - MUST be a power of two. * 默认初始容量,必须为2的幂 */ static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 162、结构 HashMap的结构为数组加链表的形式,而在jdk1.8中
2021-01-06 20:18:48 288 2
原创 3、CopyOnWriteArrayList源码浅读
源码解析过程1.实体类属性2.构造方法1.实体类属性 //官方翻译,保护所有变种者的锁 final transient ReentrantLock lock = new ReentrantLock(); //主要数据 private transient volatile Object[] array; //提供了get和set方法 final Object[] getArray() { return array; } /*
2020-12-23 19:32:39 74
原创 2、LinkedList源码浅读
LinkedList说明过程1.LinkedList所使用的节点定义2.LinkedList属性说明3.LinkedList构造方法4.LinkedList的一些方法1.LinkedList所使用的节点定义众所周知,ArrayList是以数组的形式来实现的集合,而LinkedList是以链表的形式实现的,说到链表,就会谈到节点(Node)下面是LinkedList的Node: //LinkedList中所使用的节点定义 private static class Node<E> {
2020-11-10 20:33:21 374
原创 1、ArrayList源码浅读
/** * ArrayList 源码解析 下面将对ArrayList的源码一行一行的解析(代码为ArrayList的代码)ArrayList arrayList; */public class ArrayListSourceNote { //ArrayList 实现了List接口 public class ArrayList<E> extends AbstractList<E> implements List<E>,
2020-11-03 21:57:09 92
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人