Я много работаю со структурами графов в Java, и я бы советовал сделать любой элемент данных класса Node и Edge, от которого зависит Graph, для поддержания своей структуры окончательным, без установщиков. На самом деле, если бы вы могли, я бы сделал Node и Edge полностью неизменными, что дает много преимуществ .
Так, например:
public final class Node {
private final String name;
public Node(String name) {
this.name = name;
}
public String getName() { return name; }
// note: no setter for name
}
Затем вы выполните проверку уникальности в объекте Graph:
public class Graph {
Set<Node> nodes = new HashSet<Node>();
public void addNode(Node n) {
// note: this assumes you've properly overridden
// equals and hashCode in Node to make Nodes with the
// same name .equal() and hash to the same value.
if(nodes.contains(n)) {
throw new IllegalArgumentException("Already in graph: " + node);
}
nodes.add(n);
}
}
Если вам нужно изменить имя узла, удалите старый узел и добавьте новый. Это может звучать как дополнительная работа, но это экономит много усилий, сохраняя все в порядке.
Однако, действительно, создание собственной структуры Графа с нуля, вероятно, не является необходимым - эта проблема является лишь первой из многих, с которыми вы, вероятно, столкнетесь, если создадите свою собственную.
Я бы порекомендовал найти хорошую библиотеку графов Java с открытым исходным кодом и использовать ее вместо этого. В зависимости от того, что вы делаете, есть несколько вариантов. Я использовал JUNG в прошлом и рекомендовал бы это как хорошую отправную точку.