zoukankan      html  css  js  c++  java
  • 二十三、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();

    }
    }

  • 相关阅读:
    MATLAB读取文件——从非常规文本文件中读取数据
    注意——CAN通信设备控制
    硬件——USB传输速度和物理接口
    STM32F4-浮点DSP库的MDK开发环境的设置
    CRC校验
    蓝牙串口使用心得
    Mysql 层级、执行顺序、执行计划分析
    讲一讲垃圾回收算法
    【转】Java中的新生代、老年代、永久代和各种GC
    工具链接
  • 原文地址:https://www.cnblogs.com/fyz666/p/8527534.html
Copyright © 2011-2022 走看看