浅谈HashMap

1.什么是HashMap

HashMap是一个散列表,用来存放键值对(key-value)映射。

HashMap实现了map接口,根据存放键值(key)的Hashcode来存储数据,具有较快的读取速度。

由于实现了map接口,所以HashMap里面每一个key都有一个value与之对应,key是独一无二的不可重复。value可以重复。

需要注意的是HashMap里面的元素实际上是对象,所以在创建的时候不能直接写key和value的数据类型而是要写它们的包装类。

2.HashMap的数据结构

HashMap采用数组加链表的结构进行数据存储如下图所示

 首先对要存入的key计算Hashcode,所得出的Hashcode对数组长度取模,可以得到在数组上的存储位置。但是实际中会存在两个不同的key的Hashcode对数组长度取模相同的情况,这种情况就需要用到链表。如图所示数组的每一个单元存储的是一条链表,这样我们只需要把取模相同的key存入链表就可以了。因为使用了数组加链表的数据结构,所以HashMap的读取可以实现叫较高性能。当然当HashMap存入的数据越多,数组上空的区域也就越少,发生取模相同的次数也就越多,那么链表也会越来越长,这样HashMap的读取性能就会发生下降。这种情况下HashMap会自动扩容,并且当链表长度大于8时会将链表转为红黑树进行存储。其中扩容行为发生时数组长度会变为原来的两倍,并且将就数组上的内容按照新数组的长度重新分配位置并存入新数组。下面这张图可以很好的解释HashMap的存储原理。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值