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();
}
}
これは私が起こるためにそれを描いた方法です:
たちは重複行を持っていないので、データ構造から、これらのシノニムを削除し、その後、その同義語のそれぞれと一緒に単語を印刷します。
問題はもちろん、私がハッシュマップの内容を反復している間は何も削除できません。
いずれの代替方法もありませんか?
P.S.私は雄弁と甘味になるためにタイトルが必要だったので、私は「グラフ」のメタファーを維持しています。このメタファーは有用性には限界があることを理解しています。
この問題はマップの縮小に適しています(今すぐ参考になることはありません) – Adrian