哈希表,Java中的hashCode

哈希表: 将我们所需的键通过哈希函数转换索引,然后存储在一个数组中。

哈希表是时间和空间之间的平衡,体现空间换时间的算法思想(联想到预加载,缓存等,有时候多存储,预处理缓存一些东西,带来时间复杂度的改善)

 

哈希冲突: 简单来说两个不同对象的hashcode相同,两个关键字对应相同的索引。

哈希函数的设计:

"键"通过哈希函数得到的"索引"分布越均匀越好。

特殊领域有特殊领域的韩系函数设计方式,甚至有专门的论文。

目前主要关注一般的哈希函数的设计原则。

原则:

一致性:a==b,则hash(a) == hash(b)

高效性 :计算高效简便(哈希表旨在简单高效的操作数据,如果哈希函数不高效,则与主旨背离)

均匀性:哈希值均匀分布

                            

整型:

小范围正整数直接使用。

小范围负整数进行偏移。 -100 ~ 100   ---》 0~200

大整数: 例如身份证号

取模: 比如取后四位,等同于mod 10000 , 如果取后六位,因为有两位是生日日期,只可能在0~31,因而会分布不均匀。

一个简单的解决的办法:模一个素数。

 

转载于:https://www.cnblogs.com/ltfxy/p/10422992.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值