Java 一种哈希代码函数,它为字符串返回相同的值,而不考虑字符的顺序
我想写一个hash函数,它接受像ABC和BCA或BAC这样的输入(基本上是输入字符的任何顺序,但是相同的字符)并返回相同的值。我考虑返回它们的ASCII值之和,但这不是唯一的Java 一种哈希代码函数,它为字符串返回相同的值,而不考虑字符的顺序,java,Java,我想写一个hash函数,它接受像ABC和BCA或BAC这样的输入(基本上是输入字符的任何顺序,但是相同的字符)并返回相同的值。我考虑返回它们的ASCII值之和,但这不是唯一的 即使它不是完全唯一的,最好的近似值也可以(它们将被用作Java HashMap中的键..因此,任何搜索最终也会比较真实值。因此,它的键并不严格要求是唯一的,但它们越接近唯一,HashMap的功能就越好)您可以从字符串创建字符数组,对其排序,然后调用该数组的哈希代码: String bca = "BCA"; char[] c
即使它不是完全唯一的,最好的近似值也可以(它们将被用作Java HashMap中的键..因此,任何搜索最终也会比较真实值。因此,它的键并不严格要求是唯一的,但它们越接近唯一,HashMap的功能就越好)您可以从
字符串
创建字符
数组,对其排序,然后调用该数组的哈希代码:
String bca = "BCA";
char[] chars = bca.toCharArray();
Arrays.sort(chars);
int hashCode = Arrays.hashCode(chars);
通过对字符进行排序,将BCA和BAC转换为ABC,然后转换为ABC的hashCode()。为什么不在应用哈希之前对字符串进行重新排序?这样做的好处是什么?将ABC、BCA或BAC放在同一个hashmap buket中有什么帮助?您将不必要地围绕字符串创建一个包装器。Add
+
、multiply*
和xor^
都是可交换和关联的,因此,您可以使用这些操作中的任何一种来组合ASCII值。您试图用它来解决的实际问题是什么?与其创建一个新的字符串来调用hashCode()
,不如在排序后调用Arrays.hashCode(chars)
。@Andreas哦,是的,我没有完整地阅读这个问题。无论如何,谢谢!