【发布时间】:2013-03-31 16:55:19
【问题描述】:
我正在使用优先级队列对大量自定义对象进行排序和使用。对象有一个“重量”,这是它们的自然顺序。但是,插入优先级队列的不同对象可能具有相同的“权重”。在这种情况下,我希望优先级队列按照它们放入队列的顺序对它们进行排序。
例如,如果我按该顺序添加 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 的迭代器没有返回正确的顺序,因此我查看顺序的能力有限 - 但是我可以看到元素离开队列的顺序,但显然没有按照我想要的路径。
建议?
【问题讨论】:
标签: java priority-queue