
HashMap源码
文章平均质量分 82
xbd_zc
最快=坚持
展开
-
【HashMap源码三】Java8-HashMap源码学习笔记(JDK1.8--put方法-get方法)
文章目录Java8---HashMapput方法1, hash2, putVal3,树化treeifyBin3.1TreeNode3.2树化方法-treeify设置成双向链表有什么好处assert正常情况vm参数添加`-ea`在执行4,扩容resize1.7,和1.8扩容的区别转移链表的区别4.1, 扩容方法红黑树的情况splitget方法 Java8—HashMap put方法 public V put(K key, V value) { // 先对key做hash值的计算 ret原创 2022-03-22 23:46:39 · 346 阅读 · 0 评论 -
【HashMap源码二】Java7-ConcurrentHashMap源码学习笔记(JDK1.7)
Java7–ConcurrentHashMap 文章目录Java7--ConcurrentHashMap构造方法put方法1,生成segment对象(保证只有一个线程能进行赋值)2,segment对象里的put方法tryLock()和lock()的区别2.1获取锁scanAndLockForPut(key, hash, value);2.2扩容get方法总结 ConcurrentHashMap : 线程安全的 如hashtable 为了使对象安全, 对整个对象加了一把锁 效率就低了 假设: 有两个线程都要插原创 2022-03-21 15:27:34 · 500 阅读 · 0 评论 -
【HashMap源码一】Java7-HashMap源码学习笔记(JDK1.7--put方法-get方法-出现死循环CPU100%原因等问题)
Java7–HashMap 文章目录Java7--HashMap常量构造方法put方法1,初始化方法如何获得一个大于等于2的tosize的 2的幂次方数再回到roundUpToPowerOf2方法再回到初始化方法来2, key==null调用putForNullKey3,计算下标为什么数组的最大值要是2的幂次方数4,通过key计算hash值5,添加元素addEntry(hash, key, value, i);6,扩容resize可以看到上面第3步的计算下标的公式通过下面位运算可以看出,扩容后存放新数组的下原创 2022-03-21 10:03:57 · 417 阅读 · 0 评论