Java 哈希表折叠法

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

我正在尝试为哈希表编写一个移位折叠方法

该方法传递一个键(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
  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的幂,这不仅效率更高,而且更简单。是的,我感觉这可能不是解决我遇到的所有麻烦的最佳方式:(.但我只是为了练习。我同意,我建议你尝试一种更有效的散列策略,包括负数。提示:
%
/
效率不高,
^
&
效率更高。