【发布时间】:2009-05-18 22:35:03
【问题描述】:
我正在使用HashMap <String,ArrayList<String>> 构建一个词库来保存单词及其同义词(此数据结构是必需的)。
为了分配的目的,同义关系被认为是可传递的。 (我们可以把词库想象成一个图表)。 我想要完成的是在一个文本文件中打印这个图,每行都有一个连接的组件。换句话说,所有可以合并为同义词的单词都应该放在一行中。
public void save() {
try {
FileWriter fw = new FileWriter(defaultDefinitionFile);
BufferedWriter out = new BufferedWriter(fw);
Set<String> keys = thesaurus.keySet();
Iterator<String> ite = keys.iterator();
while (ite.hasNext()) {
String key = ite.next();
out.write(key);
ArrayList<String> synonyms = thesaurus.get(key);
Iterator<String> i = synonyms.iterator();
while (i.hasNext()) {
String syn = i.next();
out.write(","+syn);
keys.remove(syn);
}
out.write("\r\n");
}
out.close();
fw.close();
}
catch (Exception e) {
System.out.println("Error writing to file");
e.printStackTrace();
}
}
这就是我想象中发生的方式:
打印一个单词及其每个同义词,然后从数据结构中删除这些同义词,这样我们就不会有重复的行。
问题当然是我在迭代哈希图的内容时无法删除任何内容。
我缺少任何替代方法吗?
附:我一直保留“图表”的隐喻只是因为我需要标题雄辩而简洁。我知道这个比喻的用处有限。
【问题讨论】:
-
这个问题适合 map reduce(目前找不到很好的参考)
标签: java hashmap graph-traversal