我正在寻找一个整数数组的哈希函数,每个整数数组包含大约17个整数。 HashMap中大约有1000个项目,我希望计算尽可能快。
我现在对很多哈希函数的选择感到困惑,我注意到它们中的大多数都是针对具有不同字符的字符串而设计的。那么有一个哈希函数是为只有数字的字符串设计的,并且可以快速运行吗?
感谢您的耐心等待!
答案 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>
,它会实现hashCode
和equals
。但请记住,在将其设置为键后,不得改变列表。这会打破哈希表。
答案 1 :(得分:0)
可以在中找到hashmap函数 https://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html
创建一个hashmap很简单..就像
一样HashMap<Object, Integer> map = new HashMap<Object, Integer>();