自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(5)
  • 收藏
  • 关注

原创 HashMap死循环问题

HashMap死循环主要是指JDK7中,HashMap扩容时采用头插法。如果在多线程情况下,2条线程同时进行扩容操作,会造成两个结点的next指针互相指向对方的情况。在JDK8中,扩容已经由头插法改为尾插法,多线程情况下虽然不会造成死循环,但是会造成操作的重复执行。比如最简单的一个情况,一个链表只有A、B两个结点,线程1和线程2一开始都指向A结点。但是线程2并不知道,所以线程2又要从A开始进行一番操作,把。线程1扩容时,会在新数组中颠倒链表的原顺序,变为。此时线程1已经完成了扩容,B是头结点,

2022-11-22 14:59:44 491

原创 HashMap底层结构、扩容机制

当链表的长度大于等于8时,为了将查找时间复杂度由n降为logn,这个链表就会转化为红黑树。直接说结论:会,但不是立刻转回,而是要等到下一次resize()时检验结点数与。在JDK8之后,HashMap由之前的“数组+链表”转为“但上面都是很基础的内容,下面讲两个比较不常见的知识点。说明确实定义了一个“树化的临界值“,且这个值为8。这个函数中,并不是直接把链表转化为红黑树,而是。太小会导致数组的利用率低,存放的数据会很分散。数组即左边一列,链表即横着相连的那部分。的关系,如果小于等于6,就可以转回。

2022-11-22 14:56:27 347

原创 HashMap底层put与get过程

首先会先检验这个key是否为null,如果为null,那么hash固定为0,所以每个HashMap中只能存在一个key为null的结点。接着通过对key调用hashCode()函数,计算出它的哈希值,并将这个哈希值的高16位与低16位做异或运算,得到最终的哈希值hash。,因为由这个确定下标的过程可以看出,只有当容量是2的n次幂时,(n - 1)的二进制的低位才会均为1,这样做与运算时保证了低位都有效,不会出现某个位置不会被使用的情况,1、通过hash()函数计算key的哈希值,并得到其下标。

2022-11-22 14:52:59 359

原创 hashCode()与equals()何时需要重写

hashCode()与equals()

2022-11-22 14:36:43 1367

原创 Java中String字面量创建与new创建的区别

由《深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)》一书中的介绍,在JDK1.7之后字符串常量池分布在堆中。最简单的方式就是通过编写一段代码实际运行检验一下。注意这里比较的是字符串的地址,所有直接用。作比较,正常情况下字符串比较需要用。最终输出的结果即结论。

2022-11-21 15:22:43 336

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除