我正在做一个哈希表项目。所以我有一个数组将持有字符串。 ArrayList<String> buckets = new ArrayList<>();
我想创建一个方法hash
但我仍然坚持如何使该方法接受一个字符串并循环该字符串中的各个字符并将它们的数值相加,然后返回整数总和。
方法hash
将用于以下测试:
@Test
public void testToString() {
HashTable h= new HashTable(10);
org.junit.Assert.assertEquals( "Empty hash output" ,
"(0)\t\n"
+"(1)\t\n"
+"(2)\t\n"
+"(3)\t\n"
+"(4)\t\n"
+"(5)\t\n"
+"(6)\t\n"
+"(7)\t\n"
+"(8)\t\n"
+"(9)\t\n"
, h+""/*.toString()*/
);
}
@Test
public void hashFunction() {
HashTable h= new HashTable(10);
org.junit.Assert.assertEquals( "hash function test" ,
4
, h.hash("abc") % h.size()
);
org.junit.Assert.assertEquals( "hash function test backwards string" ,
4
, h.hash("cba") % h.size()
);
谢谢你的进步!
答案 0 :(得分:1)
有几种方法可以执行此操作 - 例如,您可以使用charAt(i)
和for
循环:
int sum = 0;
for (int i = 0 ; i != s.length() ; i++) {
sum += s.charAt(i);
}
您还可以将字符串转换为字符数组,并在for (char ch : s.toCharArray())
语句中使用它,但这会导致为字符数组分配额外的内存。
注1:您应该注意数字溢出。
注2:考虑使用其他方法计算哈希值。添加字符代码会起作用,但带有重新排序字符的字符串将具有相同的哈希码。