1

我正在使用一个非常简单的哈希算法,将一个字符串映射到一个 32 位整数,假设哈希不好,stringB 和 stringA 都有数字 123,现在我应该遍历链表,尝试将所有项目与我的项目进行比较一直在寻找,直到我找到合适的?

4

4 回答 4

0

是的,每个桶的链表是一种方法:如果项目在列表中,你就完成了;否则,在列表末尾添加一个新项目。

另一种是循环尝试表中的下一个桶,直到找到一个空桶。

于 2012-08-05T03:00:26.733 回答
0

假设您的散列策略基于使用 LinkedList 的封闭散列,并且您的 linled 列表排序基于插入顺序,我将遍历项目并在内容上比较它们,if ( string1.compareTo(string2) == 0 ){ ...如果您想保留equals()散列,则可能与它们进行比较。

于 2012-08-05T03:00:59.400 回答
0

为了处理散列冲突,一种合适的方法是重新散列冲突的(后续)值。很难估计原始哈希函数的运行时行为,这意味着冲突的发生是未知的。使用另一个散列函数散列冲突值并将它们存储在二级表中仍然是总体上最佳的时间查找。

于 2013-09-20T19:59:26.553 回答
0

那是对的。你也可以参考这个网站http://www.strchr.com/hash_functions(除了 Wiki,当然!)

搜索映射到特定存储桶的元素可以有不同的变体——你可以有多级哈希表,甚至是二叉搜索树,而不仅仅是一个链表!

于 2012-08-05T08:38:34.573 回答