HashMap

hashmap是用对象的hash值来作为快速存取对象的map实现(hashset底层也是用的hashmap),jdk的hashmap实现中结构大致是这样的:
每个hash值都对应数组(底层数组)中的一个元素,每个数组元素是一个entry(entry其实是一个链表,记录着hash值相同的一组entry(key,value))。
在说明如何查找元素前有2个方法要说下:hashcode & equals (所有的对象都有这2个方法)

先看存储:
当要put(key,value)时,hashmap 会先计算一个key对象的hashcode(调用该对象的hashcode),然后用计算过的hash值作为底层数组中的位置/下标。如果冲突的话,还要重置整个底层数组来适应新加入的这个元素(也就是说数组长度不够了~);否则就将这个entry(key,value)放入那个位置(那个位置如果当前没有元素就直接放入,否则就会加入到那个位置的链表中去)。

在看查找:
和put一个样,get也是先计算hash值来定位查找底层数组中key的位置,然后再使用equals来比较该位置的链表中的所有对象后返回相同的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值