文章目录
参考
https://www.jianshu.com/p/4aa3bb16f36c
HashMap源码阅读
HashMap在底层将key-value当成一个整体进行处理,这个整体就是一个Entry对象。HashMap底层采用一个 Entry[]数组来保存所有的key-value,当需要存储一个Entry对象时,会根据 hash 算法来决定其在数组中的存储位置,在根据equals方法决定其在该数组位置上的链表中的存储位置
线程不安全
当多线程的情况下,重新调整HashMap大小可能产生死循环
收获
-
贯穿类的常量可以用 static final 修饰,如 DEFAULT_INITIAL_CAPACITY、DEFAULT_LOAD_FACTOR
-
transient int size;
-
创建对象可以先不 new 核心数据,等到第一次操作(修改)对象时再 new 核心数据(即懒加载)
-
if ((tab = table) != null && size > 0)
而不是 if ( table != null && size > 0) -
if ((v = e.value) == value)
而不是 if ( e.value == value)