HashMap深入浅出的理解

HashMap

存储数据方式:K,V

底层存储:数组加链表结构

 

什么是数组?

数组:采用连续的数据单元来存储数据

数组结构的特点:查询速度比较快,插入速度很慢。 那为什么插入速度慢呢? 因为:当你插入,删除数据的时候,底层数组会发生变化假如你把 2 这个节点删除掉后,后面的节点会向前移位,如果不移位局断开了,所以插入,删除很慢

 

链表:非连续,非顺序的数据结构

特点:插入快,查询比较慢

HashMap存储数据: 数据存储位置是根据 map中的K 去调用hash散列算法生成一个hash值来确定位置,如果位置相同,首先去下标去寻找该位置上是否存在数据,如果存在数据就会存储到该位置下的链表结构中 ------->next 并指向该位置  也就是我们面试常说的hash碰撞

HashMap获取数据:首先通过K能得到hash值,可能发现该数据下并不是我们想要的数据,接下来会拿hash值 ------>next数组链表下去比较hash值得大小,相等的话会将数据取出来

 

起初创建Map元素为0 根据元素计算出他的hash值后放入一个桶中,如果第二个元素计算出来位置与第一个一样会放入同一个桶内一链表形式存储,根据hashCode当链表长度大于或等于阈值(默认为 8)的时候,如果同时还满足容量大于或等于 MIN_TREEIFY_CAPACITY(默认为 64)的要求,就会把链表转换为红黑树。同样,后续如果由于删除或者其他原因调整了大小,当红黑树的节点小于或等于 6 个以后,又会恢复为链表形态,

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值