Java 查找';连接的组件';在图形中

Java 查找';连接的组件';在图形中,java,hashmap,graph-traversal,Java,Hashmap,Graph Traversal,我正在使用HashMap构建一个同义词库,以保存单词及其同义词(此数据结构是必需的) 出于赋值的目的,同义关系被认为是可传递的。(我们可以把同义词表想象成一个图表)。 我试图完成的是在一个文本文件中打印这个图形,每行上都有一个连接的组件。换句话说,所有可以作为同义词汇集在一起的单词应该放在一行 public void save() { try { FileWriter fw = new FileWriter(defaultDefinitionFile);

我正在使用
HashMap
构建一个同义词库,以保存单词及其同义词(此数据结构是必需的)

出于赋值的目的,同义关系被认为是可传递的。(我们可以把同义词表想象成一个图表)。 我试图完成的是在一个文本文件中打印这个图形,每行上都有一个连接的组件。换句话说,所有可以作为同义词汇集在一起的单词应该放在一行

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();
    }
}
public void save(){
试一试{
FileWriter fw=新的FileWriter(默认定义文件);
BufferedWriter out=新的BufferedWriter(fw);
Set keys=thesaurus.keySet();
迭代器ite=keys.Iterator();
while(ite.hasNext()){
String key=ite.next();
写出(键);
ArrayList同义词=同义词库.get(key);
迭代器i=同义词.Iterator();
while(i.hasNext()){
字符串syn=i.next();
out.write(“,”+syn);
键。移除(syn);
}
out.write(“\r\n”);
}
out.close();
fw.close();
}
捕获(例外e){
System.out.println(“写入文件时出错”);
e、 printStackTrace();
}
}
这就是我想象中的情况:

打印一个单词及其每个同义词,然后从数据结构中删除这些同义词,这样我们就不会有重复的行

当然,问题是在迭代hashmap的内容时,我不能删除任何内容

我还缺少其他的方法吗


另外,我一直使用“图表”这个比喻,只是因为我需要标题的雄辩和简洁。我知道这个比喻的用处有限。

您可以存储打印在中的单词,然后只处理尚未在集中的单词

旁白:虽然人们确实可以将此视为一个图形问题,但您的代码并没有将其视为图形问题。如果我们将其视为一个图形问题,那么我们不会假设每个单词的所有同义词都列在相应的
ArrayList
中,因此需要计算对称和传递闭包。只有这样,我们才能提取等价类

(事实上,同义词关系是不可传递的,我知道。)

我不认为这(你的总体想法)会起作用,因为“同义性”不是可传递的属性


有很多单词的同义词本身不是同义词。

与其删除该项目,不如将其添加到要忽略的项目列表中。

作为家庭作业,这是要求的一部分,以使事情更简单。我理解其区别。没错,同义词库的模型只表示一种图,其中每个连接的组件都是一个完整的图。这个问题适合map reduce(目前找不到很好的参考)