優先キューを使用して多数のカスタムオブジェクトをソートして使用しています。オブジェクトには自然な順序付けである「重み」があります。ただし、優先度キューに挿入される異なるオブジェクトは、同じ「重み」を持つことがあります。そのような場合は、優先度キューにキューに入れられた順序と同じ順序で優先度キューを並べ替える必要があります。PriorityQueueには同じ優先順位のオブジェクトがあります
たとえば、カスタムオブジェクト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;
}
}
私は、これはその最初の秩序を維持するだろうと思ったが、それはしていません。これは、A、B、Cを重み1で入力したときに発生します。投票A;何らかの形で、DとEはBの後、Cの前にソートされます。
PriorityQueuesのIteratorが正しい順序を返さないことを知っています。オーダーを見る能力 - しかし、要素がキューから出る順序を見ることができ、それが私が望む経路にはっきりと従わない。
提案?
@Stephan:更新済み回答 – Cratylus
私は自分自身のcompareToに余分なif else文を追加しました。しかし、答えの実際の肉について - 完璧、ありがとう! – USS1994