Java 查找长整数数组的哈希函数

Java 查找长整数数组的哈希函数,java,hash,hashcode,hash-function,Java,Hash,Hashcode,Hash Function,我正在寻找一个整数数组的哈希函数,每个数组包含大约17个整数。HashMap中大约有1000个项目,我希望计算速度尽可能快 我现在有点被这么多要选择的散列函数弄糊涂了,我注意到它们中的大多数都是为具有不同字符的字符串设计的。那么,是否有一个哈希函数专为只有数字且运行速度快的字符串设计 谢谢你的耐心 您没有指定任何要求(计算速度除外),但请查看。它也应该很快,只需在数组上迭代一次,并在int计算中组合元素 基于指定数组的内容返回哈希代码。对于任意两个非空int数组a和b,例如array.equal

我正在寻找一个整数数组的哈希函数,每个数组包含大约17个整数。HashMap中大约有1000个项目,我希望计算速度尽可能快

我现在有点被这么多要选择的散列函数弄糊涂了,我注意到它们中的大多数都是为具有不同字符的字符串设计的。那么,是否有一个哈希函数专为只有数字且运行速度快的字符串设计


谢谢你的耐心

您没有指定任何要求(计算速度除外),但请查看。它也应该很快,只需在数组上迭代一次,并在
int
计算中组合元素

基于指定数组的内容返回哈希代码。对于任意两个非空int数组a和b,例如array.equals(a,b),array.hashCode(a)==arrays.hashCode(b)也是这种情况

此方法返回的值与通过调用hashCode方法获得的值相同,hashCode方法位于一个列表中,该列表包含一系列整数实例,这些整数实例以相同的顺序表示元素。如果a为null,则此方法返回0


hashmap接受整数数组作为键

事实上,没有

从技术上讲,您可以在Java中使用
int[]
作为
HashMap
中的键(您可以使用任何类型的
对象
),但这不会很好地工作,因为数组没有定义有用的
hashCode
方法(或有用的
equals
方法)。因此,密钥将使用对象标识。具有相同内容的两个数组将被视为彼此不同


您可以使用
List
,它确实实现了
hashCode
equals
。但请记住,在将列表设置为键后,不能对其进行变异。这将破坏哈希表。

可以在中找到hashmap函数

创建hashmap很容易。。就像

HashMap<Object, Integer> map = new HashMap<Object, Integer>();
HashMap map=newhashmap();

您是指hashmap中的hashmap?或者一个接受字符串作为键,接受整数作为值的hashmap?很抱歉描述不明确。实际上,我只想在hashmap中按键查询对象。hashmap接受整数数组作为键。相关:在映射中使用int数组作为键似乎很奇怪。谢谢~我已经看过了,我只是想了解更多关于hashcode计算的信息。基本上,我希望哈希代码冲突尽可能少。由于只有不到1000件物品,我认为它几乎不会产生碰撞。我还希望计算速度更快,因为它将被实现很多时间。再次感谢您的努力~哈希代码的计算定义为。非常简单,只是31的加法和乘法。我想知道在这种情况下使用它是否足够?有没有更好的解决办法?我见过一些散列函数,比如FNV散列和ELF散列。看起来它们也很好实现。您可以使用数据样本运行测试。看看它是否“正常”。好吧~因为我不太熟悉散列函数,所以你能推荐一些为整数数组设计的散列,除了用31的乘积定义的散列吗?