HashMap 精华个人总结

图片源自网络


HashMap的数据结构

数据结构是通过数组和链表实现的对数据储存

链表特点:寻址困难,插入删除容易

数组特点:寻址容易,插入删除难

哈希表: 链表的数组  默认链表长度  16

疑问:如果两个key通过hashMap得到相同的index 会不会覆盖

解答:这里要补充一个属性,hashMap 有 key value next 三个属性

其中 next  是指index相同的 通过next 连接在一起 的A,B,C等键对值

 

 

解决Hash冲突的办法

1.      开放地址法

开发地址法就是一旦发生冲突,就去寻找下一个空的散列地址,只要散列地址足够大,空的散列地址总能找到,并将其记录

2.      再散列函数

Hi=RHi(key), i=1,2,…,k RHi均是不同的散列函数(比如除留余数、折叠、平方取中),在同义词产生地址冲突时就换用另一个散列函数计算散列地址,直到碰撞不再发生,这种方法不易产生“聚集”,但增加了计算时间。

3.      链地址法

将所有关键字为同义词的记录存储在一个单链表中,称这种表为同义词子表,在散列表中只存储所有同义词子表的头指针。

链地址法对于可能会造成很多冲突散列函数来说,提供了绝不会出现找不到地址的保障。但也就带来了查找时需要遍历单链表的性能损耗。

4.      公共溢出区法

为所有冲突的关键字记录建立一个公共的溢出区来存放。在查找时,对给定关键字通过散列函数计算出散列地址后,先与基本表的相应位置进行比对,如果相等,则查找成功;如果不相等,则到溢出表进行顺序查找。如果相对于基本表而言,在有冲突的数据很少的情况下,公共溢出区的结构对查找性能来说还是非常高的。

 

  


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值