Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 一种哈希代码函数,它为字符串返回相同的值,而不考虑字符的顺序_Java - Fatal编程技术网

Java 一种哈希代码函数,它为字符串返回相同的值,而不考虑字符的顺序

Java 一种哈希代码函数,它为字符串返回相同的值,而不考虑字符的顺序,java,Java,我想写一个hash函数,它接受像ABC和BCA或BAC这样的输入(基本上是输入字符的任何顺序,但是相同的字符)并返回相同的值。我考虑返回它们的ASCII值之和,但这不是唯一的 即使它不是完全唯一的,最好的近似值也可以(它们将被用作Java HashMap中的键..因此,任何搜索最终也会比较真实值。因此,它的键并不严格要求是唯一的,但它们越接近唯一,HashMap的功能就越好)您可以从字符串创建字符数组,对其排序,然后调用该数组的哈希代码: String bca = "BCA"; char[] c

我想写一个hash函数,它接受像ABC和BCA或BAC这样的输入(基本上是输入字符的任何顺序,但是相同的字符)并返回相同的值。我考虑返回它们的ASCII值之和,但这不是唯一的


即使它不是完全唯一的,最好的近似值也可以(它们将被用作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哦,是的,我没有完整地阅读这个问题。无论如何,谢谢!