![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java源码分析
文章平均质量分 91
arccosY
www.github.com/arcsinY
展开
-
Java集合框架源码阅读——ConcurrentHashMap
一、Map的初始化与扩容map初始化的方法为initTable(),使用CAS方法保证只有一个线程来对map初始化。最外层的while循环判断map是否仍未空,不为空说明已经有线程完成初始化了,直接返回。之后再根据sizeCtl的值判断当前是否有线程正在初始化。sizeCtl是一个成员变量,可能出现三种情况:> 0,说明map没有正在初始化或扩容,这时的值表示map的容量阈值 == -1,说明map正在进行初始化 < -1,说明map正在进行扩容,值为-(1 + 正在扩容的线程数原创 2021-08-12 20:06:04 · 136 阅读 · 0 评论 -
Java源码阅读——HashMap
HashMap和HashTable的区别:不是线程安全的。HashTable中每个方法加上了synchronized来保证线程安全key和value允许空值(null值),HashTable不允许一、类变量DEFAULT_INITIAL_CAPACITY = 16,初始容量,可以在构造方法中指定。容量指哈希表中bin的个数,而不是保存元素的个数MAXIMUM_CAPACITY = 2302^{30}230,最大容量DEFAULT_LOAD_FACTOR = 0.75,负载因子,可以在构造方原创 2021-06-24 21:16:05 · 97 阅读 · 0 评论 -
Java对象类型源码阅读——Object
Object类是所有类的父类,其它类经常需要重写这之中的hashCode(), equals(), toString()三个方法一、hashCode()、equals()、toString()hashCode() 方法返回一个对象对应的哈希值,这与哈希表相关的数据结构,如HashMap,有很大关系。Object类中hashCode()的返回值依赖于JVM,保证了不同对象的哈希值不同。其它类可以重写hashCode()方法,但这一方法要满足以下三个要求:同一应用的一次运行期间,同一对象的哈希值永远相原创 2020-12-19 14:12:23 · 126 阅读 · 1 评论 -
Java集合框架源码阅读——ArrayList
ArrayList是Java中提供的动态数组结构,其父类为AbstractList<E>,实现了List<E>, RandomAccess, Cloneable, Serializable四个接口一、ArrayList的初始化ArrayList中包括一个静态变量DEFAULT_CAPACITY,值固定为10,用来规定一个ArrayList对象的默认初始容量。当new ArrayList时,若不指定初始容量,则初始容量为10。 /** * Default initial ca原创 2020-10-27 23:31:27 · 180 阅读 · 0 评论