Java 哈希表折叠法
我正在尝试为哈希表编写一个移位折叠方法 该方法传递一个键(int)值,将该键值分解为几组数字,并将这些数字相加。组中的位数应与数组大小相对应 EX)输入阵列大小=15;密钥=123强> 输出:12+3=15 然而,我写的方法是反向的Java 哈希表折叠法,java,hash,Java,Hash,我正在尝试为哈希表编写一个移位折叠方法 该方法传递一个键(int)值,将该键值分解为几组数字,并将这些数字相加。组中的位数应与数组大小相对应 EX)输入阵列大小=15;密钥=123 输出:12+3=15 然而,我写的方法是反向的 public class C{ public int folding(int key) { int digit =1; // how many digits in arraySize? int arraySize =15; //if 15, 2-digits
public class C{
public int folding(int key)
{
int digit =1; // how many digits in arraySize?
int arraySize =15; //if 15, 2-digits
int hashVal =0;
while(arraySize >0 ){ //digit is 100;
digit *= 10;
arraySize /= 10;
}
while(key>0){ //hashVal should be 15
hashVal +=key%digit;
key /= digit;
}
System.out.print(hashVal);
return hashVal;
}
public static void main(String[] args) {
C g = new C();
g.folding(123);
}
}
我明白了
1+23=24
可以对我的原始代码进行一些修改以获得预期的输出吗
或者,将arraySize(int)转换为字符串并按其长度解析keyValue是唯一的方法吗?您可以这样做,但实现第一个建议的速度较慢且更复杂。注意:任何一种解决方案都可能产生一个大于等于100的数字,因此您也必须修改总和。是的,在我弄清楚如何正确执行之前的步骤之后,我打算添加它。谢谢你的提醒!我仍然没有弄清楚如何实现第一个或第二个:'(你确定必须以这种方式实现哈希吗?例如,如果你使用2的幂,这不仅效率更高,而且更简单。是的,我感觉这可能不是解决我遇到的所有麻烦的最佳方式:(.但我只是为了练习。我同意,我建议你尝试一种更有效的散列策略,包括负数。提示:
%
和/
效率不高,
和^
和&
效率更高。