自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 HashMap源码之put方法

1.准备讲put方法之前,先看两个方法,这两个方法可以根据一个key-value键值对的key确定其在entry数组中的下标位置1.hash方法,计算key的hash值static final int hash(Object key) { int h; // h = key.hashCode() 为第一步 取hashCode值 // h ^ (h >>> 16) 为第二步 高位参与运算, return (key == null) ? 0 : (h =

2022-01-07 00:03:19 777

原创 HashMap源码之resize方法

1.扩容原理JDK7的时候先通过resize()方法对entry数组扩容,然后通过transfer()方法重新计算每个元素在新数组中的位置,对于JDK7的具体实现不再赘述。下面我们讲解下JDK1.8做了哪些优化。经过观测可以发现,我们使用的是2次幂的扩展(指长度扩为原来2倍),所以,元素的位置要么是在原位置,要么是在原位置再移动2次幂的位置。看下图可以明白这句话的意思,n为table的长度,图(a)表示扩容前的key1和key2两种key确定索引位置的示例,图(b)表示扩容后key1和key2两种key确

2022-01-07 00:02:00 829

原创 HashMap源码之构造方法

#一、HashMap数据存储结构HashMap底层就是一个哈希表,即一个数组加链表结构,在java8中如果链表长度达到8则转化为红黑树结构,具体操作过程后面会讲到,先看看最终存储元素后HashMap的结构,Entry为HashMap内部维护的一个静态内部类,在java8改名为Node下面先来看看静态内部类Node,它其实就是一个单向链表的节点类,hash存储key对应的hash值,key和value即存储保存在HashMap中的key-value键值对,next是一个指向下一Node节点的引用stat

2022-01-06 23:42:14 651

空空如也

空空如也

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

TA关注的人

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