我试图/usr/share/dict/words
在 Ubuntu 12.04 上找到两个具有相同哈希码的单词。
试图保持Map<Integer, HashSet<String>>
。
读完单词后计算他的哈希码h
并将单词放入键为 的集合中h
。
然后遍历所有键并打印大小> 1的集合。
但是我在运行后看到了非常奇怪的输出。
代码:
public static void main(String[] args) throws FileNotFoundException {
HashSet<String> fileWords = new HashSet<>();
Map<Integer, HashSet<String>> duplicats = new HashMap<>();
Scanner scan = new Scanner(new File("/usr/share/dict/words"));
while (scan.hasNext()) {
String word = scan.nextLine();
int h = word.hashCode();
fileWords.add(word);
duplicats.put(new Integer(h), fileWords);
}
Set<Integer> keySet = duplicats.keySet();
for (Integer key : keySet) {
HashSet<String> value = duplicats.get(key);
if (value.size() > 1) {
System.out.println(key + " : " + value.toString());
}
}
}
输出:
21917608 : [repaying, Zubenelgenubi, treason, indignation, eyetooth, ....// a lot of words
它看起来很奇怪。我不知道出了什么问题?
更新:
我找到了解决方案:
public static void main(String[] args) throws FileNotFoundException {
Map<Integer, HashSet<String>> duplicats = new HashMap<>();
Scanner scan = new Scanner(new File("/usr/share/dict/words"));
while (scan.hasNext()) {
String word = scan.nextLine();
int h = word.hashCode();
if (!duplicats.containsKey(h))
{
HashSet<String> newSet = new HashSet<>();
newSet.add(word);
duplicats.put(new Integer(h), newSet);
}
else
{
duplicats.get(h).add(word);
}
} /// rest the same
如何解决这个麻烦?