基本数据结构之散列表

散列表

散列表(Hash Table,也称作哈希表)是根据数据的关键码值(Key-Value)对数据进行存取的数据结构。散列表通过映射函数把关键码值映射到表中的一个位置,从而加快了查找的速度。对于散列表查询,其复杂度是O(1)

给定表M,存在函数 f(key),对任意给定的关键字key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为散列表,称函数 f(key)为散列函数。具体的数据结构如图4-9所示:

在这里插入图片描述

散列表算法通过在数据元素的存储位置和它的关键字(可用key表示)之间建立一个确定的对应关系,使每个关键字和散列表中唯一的存储位置相对应。在查找时只需根据这个对应关系找到给定关键字在散列表中的位置即可,真正做到一次查找命中。

常用的散列函数

方法描述
直接定址法取关键字或关键字的某个线性函数值为散列地址,即 h(key) = key或h(key)=a×key+b,其中a和b为常数。
平方取值法取关键字平方后的中间几位为散列地址。
折叠法将关键字分割成位数相同的几部分,然后取这几部分的叠加和作为散列地址。
除留余数法取关键字被某个不大于散列表长度 m的数p除后所得的余数为散列地址,即h(key)=key/p (p≤m)。
随机数法选择一个随机函数,取关键字的随机函数值作为其散列地址,即h(key)=random(key)。
Java HashCode在Java中计算HashCode的公式为 f(key)= s[0] × 31 n-1 +s[1] × 31 n-2 +…+s[n-1]。具体实现如下:
public int HashCode(){
    int h =hash;
    if(h==0&&value.length>0){
        char val[]=value;
        for(int i=0;i<value.length;i++){
            h=31*h+val[i];
        }
        hash=h;
    }
    return h;
}

hash的应用

Hash?要用于用信息安全加密和快速查询的应用场景。
◎ 信息安全:Hash?要被用于信息安全领域的加密算法中,它把一些不同长度的信息转化成杂乱的 128 位编码,这些编码的值叫作Hash值。也可以说,Hash就是找到一种数据内容和数据存放地址之间的映射关系。
◎ 快速查找:散列表,又叫作散列,是一种更加快捷的查找技术。基于列表集合查找的一般做法是从集合中拿出一个元素,看它是否与当前数据相等,如果不相等,则缩小范围,继续查找。而散列表是完全另外一种思路,在知道key值以后,就可以直接计算这个元素在集合中的位置,不需要一次又一次的遍历查找。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你们卷的我睡不着QAQ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值