Я строю тезаурус с помощью 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. Я сохраняю метафору «graph» только потому, что мне нужен титул, чтобы быть красноречивым и сукцином. Я понимаю, что эта метафора ограничена в полезности.
эта проблема подходит для уменьшения карты (не могу найти хорошую ссылку для нее прямо сейчас) – Adrian