找到长整数数组的哈希函数

时间:2014-11-26 03:15:25

标签: java hash hashcode hash-function

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

我现在对很多哈希函数的选择感到困惑,我注意到它们中的大多数都是针对具有不同字符的字符串而设计的。那么有一个哈希函数是为只有数字的字符串设计的,并且可以快速运行吗?

感谢您的耐心等待!

2 个答案:

答案 0 :(得分:1)

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

  

根据指定数组的内容返回哈希码。对于任何两个非null int数组a和b,如Arrays.equals(a,b),Arrays.hashCode(a)== Arrays.hashCode(b)也是如此。

     

此方法返回的值与通过在List上调用hashCode方法获得的值相同,该List包含表示相同顺序的a元素的Integer实例序列。如果a为null,则此方法返回0.


  

并且hashmap接受一个整数数组作为键。

实际上,没有!

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

您可以使用List<Integer>,它会实现hashCodeequals。但请记住,在将其设置为键后,不得改变列表。这会打破哈希表。

答案 1 :(得分:0)

可以在中找到hashmap函数 https://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html

创建一个hashmap很简单..就像

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