Sea*_*ean 4 java priority-queue comparator
可能重复:
Java:从优先级队列中排队的奇怪顺序
我厌倦了通过实现以下比较器将优先级队列转换为队列:
这是代码:
import java.util.Comparator;
public class QueueComparator implements Comparator<Square>{
public int compare(Square square1, Square square2)
{
return 1;
}
}
Run Code Online (Sandbox Code Playgroud)
但是由此产生的"队列"并没有保持秩序(FIFO).为什么?
问题是为什么要这样?
首先,你的比较器完全坏了,因为它违反了基本约束条件
sign(compare(a,b)) = - sign(compare(b,a))
Run Code Online (Sandbox Code Playgroud)
和
compare(a,a) == 0
Run Code Online (Sandbox Code Playgroud)
因此,使用它的任何东西都可能会产生各种结果,例如丢失条目,在无限循环中运行,抛出堆栈溢出......
如果你想实现IDontGiveAShitComparator它,它应该一直返回0.取决于比较器的一切应该能够处理.
什么订单结果仍然取决于实施.如果它将元素存储在列表中FIFO或LIFO是可能的,如果它存储在平衡树中,它可能总是在一侧添加元素,导致树的重新平衡,这将几乎混合一切.
也许它使用基于哈希的东西,在这种情况下,所有具有相同优先级的元素可能会按其哈希值排序.