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

}
}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值