1

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

我现在对这么多可供选择的哈希函数感到困惑,我注意到它们中的大多数都是为具有不同字符的字符串而设计的。那么有没有专为只有数字的字符串设计的哈希函数呢?

谢谢你的耐心!

4

2 回答 2

1

您没有指定任何要求(计算速度除外),但请查看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>, 它确实实现了hashCodeand equals。但请记住,在将列表设置为键后,您不得对其进行变异。那会破坏哈希表。

于 2014-11-26T03:19:00.760 回答
0

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

创建哈希图很容易..它就像

HashMap<Object, Integer> map = new HashMap<Object, Integer>();
于 2014-11-26T03:51:34.010 回答