【发布时间】:2015-06-14 19:22:02
【问题描述】:
我正在使用以下课程自学哈希表: http://algs4.cs.princeton.edu/34hash/
在练习部分,我发现了以下内容:
密码检查器。 编写一个程序,从命令行读取字符串和标准输入的单词字典,并检查它是否“好”密码。在这里,假设“好”意味着它 (i) 至少有 8 个字符长,(ii) 不是字典中的单词,(iii) 不是字典中的单词,后跟数字 0-9(例如, hello5), (iv) 不是由数字分隔的两个单词(例如,hello2world)
我想我对如何使用哈希表 (HashMap) 感到困惑。假设一个更简单的练习:我们只需要检查单词是否在字典中,我需要使用哈希表来执行此操作。我的猜测是我应该使用单词作为键添加字典中的所有单词,如果我想检查给定单词是否在字典中,我使用“get”方法。如果找到,这个词不是一个好的密码。但是:
1) 与给定键关联的值应该是什么?
2) 如果两个词散列到同一个地方怎么办?我知道碰撞部分是用Linear Probing或者Separate Chaining解决的,所以我用get的时候会在数据结构中处理?
我不想让你编写任何代码,我只是想了解它是如何工作的。
提前致谢!
@Edit: 我的另一个想法是只使用 hashCode。假设我有一个包含字典所有单词的字符串数组。然后,如果它们具有相同的哈希码,我必须进行比较(因为哈希必须与等于一致)。如果我理解得好,值无关紧要,在这种情况下,我只需要检查单词是否在字典中。所以我应该检查是否有东西还给我。
【问题讨论】:
-
添加什么作为值是个好问题。如果您只需要检查单词是否存在,只需使用
HashSet即可。否则,您可能想要进行一些统计跟踪(用户尝试使用特定单词的次数),但出于安全原因,这可能不是一个好主意。