摘要:
最近在学多线程并发的知识,发现好像ThreadLoca还挺重要,决定看看源码以及查找各方资料来学习一下。 ThreadLocal能够提供线程的局部变量,让每个线程都可以通过set/get来对这个局部变量进行操作,不会和其它线程的局部变量进行冲突,实现了线程的数据隔离。 首先是ThreadLocal的 阅读全文
摘要:
今天首先讲解helpTransfer方法 final Node<K,V>[] helpTransfer(Node<K,V>[] tab, Node<K,V> f) { Node<K,V>[] nextTab; int sc; //如果table不是空,且node节点是转移类型,数据校验,且node节 阅读全文
摘要:
接下来就讲解put里面的三个方法,分别是 1、数组初始化方法initTable() 2、线程协助扩容方法helpTransfer() 3、计数方法addCount() 首先是数组初始化,再将源码之前,先得搞懂里面的一个重要参数,那就是sizeCtl。 sizeCtl默认为0,代表数组未初始化。 si 阅读全文
摘要:
最近在学习并发map的源码,如果由错误欢迎指出。这仅供我自己学习记录使用。 首先就先来说一下几个全局变量 private static final int MAXIMUM_CAPACITY = 1 << 30; //最大容量2的30次方 private static final int DEFAUL 阅读全文
摘要:
HashMap的源码比较复杂,最近也是结合视频以及其余大佬的博客,想着记录一下自己的理解或者当作笔记 JDK1.8后,HashMap底层是数组+链表+红黑树。在这之前都是数组+链表,而改变的原因也就是如果链表过长,查询的效率就会降低,因此引入了红黑树。 这里的链表是一个单向链表 static cla 阅读全文
摘要:
LinkedList的基本结构是双向链接的直线结构。 链表的构造函数有两个,其中空构造函数什么都没做,就是一个空实现。 /** * Constructs an empty list. */ public LinkedList() { } /** * Constructs a list contain 阅读全文
摘要:
Vector类的基本属性 protected Object[] elementData; /** * The number of valid components in this {@code Vector} object. * Components {@code elementData[0]} t 阅读全文
摘要:
首先是ArrayList的一些属性: 1 private static final long serialVersionUID = 8683452581122892189L; 2 3 /** 4 * Default initial capacity. 5 */ 6 private static fi 阅读全文
摘要:
选择排序原理:首先经过第一轮比较得到最小的记录,然后将该记录与第一个记录的位置进行交换;接着对不包括第一个记录以外的其他记录进行第二轮比较,得到最小的记录并与第二个记录进行位置交换;重复该过程,知道进行比较的记录只有一个时为止。 同冒泡排序一样,总共有数组长度减一次排序。排序算法中也有一个小优化。代 阅读全文
摘要:
今天开始学习各大排序了。首先是冒泡排序。顾名思义,冒泡排序就是重得往下沉,才会有气泡上升。 对于一个数组,要求从小到大得进行排序。例如[36,25,48,12,25,65,43,57]; 排序只需排数组长度减一次,因为倒数第二次排好后最后一个数也就在相应得位置了。 并且如果数组在外循环中就已经是排好 阅读全文