对于家庭作业,我需要基于启发式比较节点,以便我可以将它们放在TreeSet中。但是,当两个节点的启发式值相等时,我需要一些方法来打破平局。
我不允许修改提供的Node类,据我所知,Node没有任何其他值/属性可以帮助我打破我尚未使用的领带。 (我们正在处理谜题,而不是它真的很重要。)有什么方法可以根据我将它们添加到我的TreeSet时打破关系?我只是不知道如何去做....
我在优先级阻塞队列的文档中看到了一个示例,但我想使用Comparator接口,我无法使其工作。
提前致谢;任何提示/提示都非常感谢。
答案 0 :(得分:1)
您可以尝试System.identityHashCode(Object)获取可用于对对象进行排序的int。
答案 1 :(得分:1)
您是否可以为节点创建包装器?
public class NodeWrapper implements Comparable<NodeWrapper> {
private static AtomicLong serialNumGenerator = new AtomicLong(0L);
private final Node node;
private final long serialNum;
public NodeWrapper(Node node) {
this.node = node;
this.serialNum = serialNumGenerator.getAndIncrement();
}
@Override
public int compareTo(NodeWrapper other) {
int compare = this.node.compareTo(other.node);
if (compare == 0) {
compare = (this.serialNum < other.serialNum)
? -1
: ((this.serialNum > other.serialNum) ? 1 : 0);
}
return compare;
}
// implement other methods including equals() and hashCode()
}