Comparator<struc> cmp= new Comparator<struc>() {
public int compare(struc e1, struc e2) {
return e1.x - e2.x;
}
};
struc是点结构。 当我提供:
(3,1)(3,2)(3,3)(3,4)
q
给了我:
(3,1)(3,4),(3,3)(3,2)
当我提供时:
(3,1)(3,3)(3,2)(3,4)
(3,1)(3,4),(3,2)(3,3)
。
逻辑是什么?
它是否只是给出key_in
序列的顺序,因为y
未被比较?
当我检查API时,它告诉我“基于优先级堆的无界优先级队列...此队列的头部是指定排序的最小元素。如果多个元素绑定最小值,则头部为1这些因素 - 关系被任意打破。“
有人可以帮忙解释一下吗?
答案 0 :(得分:2)
订单 未定义,因为他们的x
坐标值是绑定所有点绑定相同。如果您希望获得相同的订单,则应通过修改compare()
实施来强制执行此操作,以便同时考虑其y
坐标值。
而且,即使订单由于某种原因而变得相同,但程序依赖于未定义的行为以确保其正确性是不正确的。
答案 1 :(得分:1)
答案在你引用的文档中:“关系被任意打破”意味着PQ可以在看到平局时做任何想做的事情,包括随机改变你的输入。
所有输入都具有相同的x坐标,因此它们都是并列的,优先级队列可以“任意地”处理它,意思是它想要的任何方式,没有任何保证。