JDK7Hashmap理解

通过对Hashmap的源码分析,我们可以看到JDK7的Hashmap实际上是由数组和链表联合构成的。

而通过我的理解认为,他在这个版本之所以能够有效率,是因为他汲取了数组和链表的优点。

正如我们普遍所理解的一样,数组是一种查询快,插入慢的数据结构,而链表恰恰相反,链表是一种查询慢,但插入很快的数组,正因如此,Hashmap综合了两个的优点。

我们需要知道的是,我们所说的意义上的数组也并不是要插入我们需要插入数据类型的数组,而数组中存放的是对插入数据的那条链表的引用。

首先我们需要得到的是我们开始所要创建的hashmap的长度(即数组的长度)。当不是2的幂次方时,在内部会更改到比他大的最小的2的幂次方。

当我们需要向hashmap中插入数据时,我们需要通过散列生成的hashcode,再通过其中 indexfor() 得到我们需要插进数组的下标,然后通过头插法将数据插入到链表当中。

这时候就涉及到扩容问题,而扩容问题就需要提到两个变量,负载因子和阈值,阈值的大小由最大当前数组的最大容量和负载因子相乘得到。当当前数组的数据量已经达到了阈值,就会触发扩容机制。

另外需要注意,这个版本的hashmap并发时会出现问题,出现元素之间可能出现循环链表的问题

具体的源码分析会在JDK8的里面写出来

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值