【发布时间】:2013-12-19 15:54:29
【问题描述】:
我有以下类用作图表的一部分:
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必须改回来。