我正在使用優先級隊列來排序和使用大量的自定義對象。對象有一個「重量」,這是他們的自然順序。但是,插入優先級隊列的不同對象可能具有相同的「權重」。在這種情況下,我希望優先級隊列按照它們放入隊列的順序排序。例如,如果我按照該順序添加CustomObjects A,B,C,D,所有與優先級隊列具有相同的「權重」的應按順序返回它們 - 即使我輪詢了一個或在添加其他對象之前更多的對象。PriorityQueue具有相同優先級的對象
這裏是的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;並添加D,E也與重量1.不知何故,D和E排序後B,但之前C.
我知道該迭代器PriorityQueues不返回正確的順序,所以我受限於我查看排序的能力 - 但是我可以看到元素離開隊列的順序,而且顯然不遵循我希望的路徑。
對此提出建議?
@Stephan:更新回答 – Cratylus
我剛剛通過添加一個額外的if語句來修改我自己的compareTo。但對於答案的實際肉 - 完美,謝謝! – USS1994