我正在寻找一个整数数组的哈希函数,每个数组包含大约 17 个整数。HashMap 中有大约 1000 个项目,我希望计算尽可能快。
我现在对这么多可供选择的哈希函数感到困惑,我注意到它们中的大多数都是为具有不同字符的字符串而设计的。那么有没有专为只有数字的字符串设计的哈希函数呢?
谢谢你的耐心!
我正在寻找一个整数数组的哈希函数,每个数组包含大约 17 个整数。HashMap 中有大约 1000 个项目,我希望计算尽可能快。
我现在对这么多可供选择的哈希函数感到困惑,我注意到它们中的大多数都是为具有不同字符的字符串而设计的。那么有没有专为只有数字的字符串设计的哈希函数呢?
谢谢你的耐心!
您没有指定任何要求(计算速度除外),但请查看java.util.Arrays#hashCode。它也应该很快,只需在数组上迭代一次并在int
计算中组合元素。
根据指定数组的内容返回哈希码。对于任意两个非空 int 数组 a 和 b 使得 Arrays.equals(a, b),Arrays.hashCode(a) == Arrays.hashCode(b) 也是如此。
此方法返回的值与通过在 List 上调用 hashCode 方法获得的值相同,该 List 包含以相同顺序表示 a 的元素的 Integer 实例序列。如果 a 为 null,则此方法返回 0。
并且 hashmap 接受一个整数数组作为键。
其实,不!
从技术上讲,您可以在 Javaint[]
中用作 a 中的键HashMap
(您可以使用任何类型的Object
),但这不会很好,因为数组没有定义有用的hashCode
方法(或有用的equals
方法)。所以密钥将使用对象标识。具有相同内容的两个数组将被视为彼此不同。
您可以使用List<Integer>
, 它确实实现了hashCode
and equals
。但请记住,在将列表设置为键后,您不得对其进行变异。那会破坏哈希表。
hashmap 函数可以在 https://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html中找到
创建哈希图很容易..它就像
HashMap<Object, Integer> map = new HashMap<Object, Integer>();