散列(hash)算法——Java表示

本文介绍了散列算法的基本概念、特点和常见类型,包括除余法、乘法、平方取中法、直接寻址法、数字分析法和折叠法。还探讨了Java中hashCode()和equals()的关系,以及Hash冲突的解决方法,如开放地址法、再哈希、链地址和建立公共溢出区。文章以JDK中的String类为例,展示了hashCode()的实现,并提到了HashMap中的冲突解决策略。
摘要由CSDN通过智能技术生成

Hash,一般翻译做散列、杂凑,或音译为哈希,是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。

百度百科给出的散列算法的解释如上,个人理解散列算法就是给个输入通过散列算法后输出得道固定长度的输出。
输入—>散列算法—>输出(固定长度)
第一个接触的散列算法应该是MD5吧…学JavaWeb的时候做密码加密。虽然现在已经不推荐使用了。
0.散列算法的特点
a.固定长度
b.不可逆
c.高速存储“空间换时间”
…先这些想到再加
1.常用散列算法
MD5,SHA这种的就不列了,我们说点基础的…
a.除余法
除余法就是用关键码a % M,并取余数作为散列地址。除余法几乎是最简单的散列方法,散列函数为: h(x) = x % M。

//取余法
    public int remainderHash(int a)
    {
   
        int b = 0;
        b = a % 10;
        return b;
    }

b.乘法
这种类型的Hash函数利用了乘法的不相关性(乘法的这种性质,最有名的莫过于平方取头尾的随机数生成算法,虽然这种算法效果并不好)

static int bernsteinHash(String key)
{
   
     int hash = 0;
     int i;
     for (i=0; i<key.length(); ++i) {
   
         hash = 33 
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值