我有以下類被用作圖的一部分:如何爲循環圖節點編寫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
的兩個實例是同一個對象,同時避免無限循環?這是可以接受的在MyNode類中添加一個visited
布爾值,用於停止探索?還是有更好的解決方案?
謝謝!
'visited'將不得不改回來。 –