hashmap的简单理解,底层实现原理,hash冲突以及解决办法

hashmap:

hashmap实现了map接口,map接口是对键值对的一个映射,map中不允许出现重复的key,但是key和value都可以为空,而且hashmap线程不安全。因为它是非synbchronized的,都是collection集合的方法可以保证synchronized,所以hashmap也是可以被保证synchronized,多个线程访问它的时候,只能有一个线程更改map。

 

hashmap底层实现原理:

 首先hashmap它是一个entry对象组成的数组,entry对象又是key,vlaue形式的键值对,我们可以根据Key去用hashcode()去计算相应的哈希值,再通过哈希值去计算它在数组中的索引,找到索引,如果是null,就是直接插入,如果不为空,就做循环遍历,找到相同哈希值的对象,然后对比key,如果哈希值相同,key相同,就是把vlaue进行覆盖,如果key不同,就把这个对象进行链表尾插,长度超过8就变成红黑树。

 

hash冲突:

就是我们根据不同的key计算的哈希值相同,也就是我们根据他的索引找到具体地址,发现已经有值了,就会发生冲突。

解决办法:

1、连地址法:就是把hashmap的实现,我们知道索引位置,去形成链表,做尾插操作,超过8就变成红黑树

2、再哈希法:就是再次去构造哈希函数,计算出不同的哈希值,这样就不会产生冲突了。

3、建立公共溢出区:把哈希表分成公共表和溢出表, 当发生溢出时,就把溢出数据放到溢出表中。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值