我正在使用优先级队列来排序和使用大量自定义对象。对象有一个“重量”,即它们的自然顺序。但是,插入优先级队列的不同对象可能具有相同的“权重”。在这种情况下,我希望优先级队列按照它们放入队列的顺序对它们进行排序。
例如,如果我按该顺序添加 CustomObjects A、B、C、D,它们都具有相同的“权重”,那么优先级队列也应该按该顺序返回它们——即使我轮询一个或多个对象在添加其他之前。
这是我的自定义对象的 CompareTo:
public int compareTo(CustomObject o) {
int thisWeight = this.weight;
int thatWeight = o.weight;
if(thisWeight < thatWeight){
return -1;
}
else{
return 1;
}
}
虽然我认为这会保持最初的顺序,但事实并非如此。当我输入权重为 1 的 A、B、C 时会发生这种情况;投票A;并添加权重为 1 的 D,E。不知何故,D 和 E 排序在 B 之后,但在 C 之前。
我知道 PriorityQueues 的迭代器没有返回正确的顺序,所以我查看顺序的能力有限 - 但是我可以看到元素离开队列的顺序,它显然没有遵循路径我想要它。
建议?