私はグラフの一部として使用される次のクラスがあります。循環グラフノードのhashCode()関数の記述方法は?
public class MyNode {
private String name;
private Set<MyNode> parents;
private Set<MyNode> children;
// getters and setters
}
私はEclipseのSource/Generate hashCode() and equals()
を使用する場合、それは、このメソッドを生成します。
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((children == null) ? 0 : children.hashCode());
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result + ((parents == null) ? 0 : parents.hashCode());
return result;
}
問題は、このメソッドから行くことです()、最初の子のhashCode()を計算すると、元のノードにはparents.hashCode()
で戻ってきますが、hashCode()が既に計算されていることはわかりません。その後、元のノードのchildren
に再び入り、美しい無限ループを与えます。
質問:MyNode
の2つのインスタンスが同じオブジェクトであり、同時に無限ループを回避する方法を確認するにはどうすればよいですか?探索を停止する目的で、MyNodeクラスにvisited
ブール値を追加することは可能ですか?または、より良い解決策がありますか?
ありがとうございます!
「訪問済み」を元に戻す必要があります。 –