比较器中的FIFO连接断路器?

时间:2011-10-12 05:06:14

标签: java comparator

对于家庭作业,我需要基于启发式比较节点,以便我可以将它们放在TreeSet中。但是,当两个节点的启发式值相等时,我需要一些方法来打破平局。

我不允许修改提供的Node类,据我所知,Node没有任何其他值/属性可以帮助我打破我尚未使用的领带。 (我们正在处理谜题,而不是它真的很重要。)有什么方法可以根据我将它们添加到我的TreeSet时打破关系?我只是不知道如何去做....

我在优先级阻塞队列的文档中看到了一个示例,但我想使用Comparator接口,我无法使其工作。

提前致谢;任何提示/提示都非常感谢。

2 个答案:

答案 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()
}