
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 · 181 阅读 · 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 · 127 阅读 · 0 评论 -
Java对象类型源码阅读——Object
Object类是所有类的父类,其它类经常需要重写这之中的hashCode(), equals(), toString()三个方法 一、hashCode()、equals()、toString() hashCode() 方法返回一个对象对应的哈希值,这与哈希表相关的数据结构,如HashMap,有很大关系。 Object类中hashCode()的返回值依赖于JVM,保证了不同对象的哈希值不同。其它类可以重写hashCode()方法,但这一方法要满足以下三个要求: 同一应用的一次运行期间,同一对象的哈希值永远相原创 2020-12-19 14:12:23 · 180 阅读 · 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 · 238 阅读 · 0 评论