Я реализую ориентированный граф и написал метод удаления ребра. Я хочу удалить значение (край) из ключа (узла). Я не понимаю, почему мы должны создать новую AbstractMap (край), чтобы удалить существующую AbstractMap (край).
public class DirectedGraph {
private final Map<String, Set<Map.Entry<String, String>>> adj;
public Graph() {
adj = new HashMap<>();
}
public boolean removeEdge(String origin, String dest, String label) {
if (!adj.containsKey(origin)) {
throw new IllegalArgumentException("Node " + origin + " is not in this graph.");
} else if (!adj.containsKey(dest)) {
throw new IllegalArgumentException("Node " + dest + " is not in this graph.");
}
boolean success = false;
if (adj.containsKey(origin) && adj.get(origin).contains(new AbstractMap.SimpleImmutableEntry<>(dest, label))) {
adj.get(origin).remove(new AbstractMap.SimpleImmutableEntry<>(dest, label));
success = true;
}
return success;
}