【发布时间】:2014-05-26 15:36:31
【问题描述】:
如果您要在 Java 中创建一个通用哈希表(假设它还没有),那么您将如何实现其默认哈希函数?我知道你可以传入一个(通过接口),但大多数数据结构都有默认值。
我的尝试:
由于 Java 泛型需要引用类型,并且 Java 中的所有引用类型都实现 hashCode(),我认为您可以只使用 T.hashCode() % backingArraySize 作为哈希函数,这样就足够了。毕竟,你可以存储在哈希表中的任何类型的实现者都应该给他们的类型一个合适的 hashCode() 函数,对吧?
有更好的方法吗?
【问题讨论】:
-
定义更好。实现哈希表的方法有很多种(开放寻址、链接、桶的种类等),并且有多种数据和分布可能导致不同的哈希函数要求。
-
有趣...为什么实施很重要?无论您是开放寻址还是链接,更少的冲突仍然更有效,对吧?
-
为什么是通用的?由于所有类都实现了
hashCode(),因此只需设置参数Object即可。泛型(提供类型边界)没有任何作用。 -
顺便说一下,
hashCode()可以是负数,那么hashcode() % size也可以是负数。
标签: java data-structures hash hashtable