• 二十三、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();

    }
    }

  • 相关阅读:
    C++ | 继承(基类,父类,超类),(派生类,子类)
    C++ std::pair的用法
    派生类构造函数和多重继承的二义性问题
    C++vector and opencv Mat
    C++中union的使用方法
    C++中数组作为形参的方法
    在Python中使用OpenCV(CV2)对图像进行边缘检测
    你可能会用到的一些小程序效果、工具
    AI口算批改、练习小程序
    拍照搜题小程序
  • 原文地址:https://www.cnblogs.com/fyz666/p/8527534.html
Copyright © 2020-2023  润新知