• 二十三、hash表之hash化的两种方式


    接上一节,在把关键字改成string类型之后,需要对key进行hash化,这里使用了两种方式:

    1.相加法

    2.幂乘法

    同时防止越界,我们使用了压缩值的方法即取余数。但是由于int的长度限制,我们使用了biginterger方法。

    info类和上节相同,这里只丢出hashTable的源代码:

    public class hashTable {
    private Info[] array;

    public hashTable() {
    // TODO Auto-generated constructor stub
    array = new Info[100];
    }
    public hashTable(int MaxSize)
    {
    array = new Info[MaxSize];
    }

    //插入数据
    public void insert(Info info)
    {
    array[hashCode1(info.getKey())] = info;

    }

    //查看数据
    public Info find(String key)
    {
    return array[hashCode1(key)];
    }

    //hash编码
    public int hashCode1(String key)
    {
    // int hashKey =0;
    // int letter;
    // int pow27 = 1;

    BigInteger hashKey = new BigInteger("0");
    BigInteger pow27 = new BigInteger("1");

    /*********相加编码法******************/
    // for(int i=key.length()-1;i>=0;i--)
    // {
    // letter = key.charAt(i);
    // hashKey += letter;
    // }
    /**********相加编码法*****************/


    /**************相乘编码法********************/
    for(int i=key.length()-1;i>=0;i--)
    {
    int letter = key.charAt(i)-96 ;
    BigInteger letterB = new BigInteger(String.valueOf(letter));
    hashKey = hashKey.add(letterB.multiply(pow27));
    pow27 = pow27.multiply(new BigInteger(String.valueOf(27)));
    }
    /**************相乘编码法********************/

    return hashKey.mod(new BigInteger(String.valueOf(array.length))).intValue();

    }
    }

  • 相关阅读:
    Kubernetes豁然贯通(安全认证)
    Kubernetes登堂入室(数据存储)
    Kubernetes渐入佳境(Service和Ingress详解)
    Kubernetes崭露头角(Pod控制器详解)
    Kubernetes初露锋芒(Pod详解)
    Kubernets初窥门径 (NameSpace、Pod、Label、Deployment、Service)
    Kubernetes初学乍练(资源管理)
    Kubernetes小试牛刀
    构建高并发的扣减服务
    Redis集群的三种姿势
  • 原文地址:https://www.cnblogs.com/fyz666/p/8527534.html
Copyright © 2020-2023  润新知