博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二十三、hash表之hash化的两种方式
阅读量:5248 次
发布时间:2019-06-14

本文共 1291 字,大约阅读时间需要 4 分钟。

接上一节,在把关键字改成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();
}
}

转载于:https://www.cnblogs.com/fyz666/p/8527534.html

你可能感兴趣的文章
MacOS copy图标shell脚本
查看>>
国外常见互联网盈利创新模式
查看>>
Oracle-05
查看>>
linux grep 搜索查找
查看>>
Not enough free disk space on disk '/boot'(转载)
查看>>
android 签名
查看>>
vue项目中使用百度统计
查看>>
android:scaleType属性
查看>>
SuperEPC
查看>>
mysql-5.7 innodb 的并行任务调度详解
查看>>
shell脚本
查看>>
Upload Image to .NET Core 2.1 API
查看>>
Js时间处理
查看>>
Java项目xml相关配置
查看>>
三维变换概述
查看>>
第三次作业
查看>>
vue route 跳转
查看>>
【雷电】源代码分析(二)-- 进入游戏攻击
查看>>
Entityframework:“System.Data.Entity.Internal.AppConfig”的类型初始值设定项引发异常。...
查看>>
Linux中防火墙centos
查看>>