プライオリティ キューを使用して、多数のカスタム オブジェクトを並べ替えて使用しています。オブジェクトには、自然な順序である「重み」があります。ただし、優先度キューに挿入されるさまざまなオブジェクトが同じ「重み」を持つ場合があります。そのような場合、キューに入れられたのと同じ順序でプライオリティ キューに並べてもらいたいと思います。
たとえば、CustomObjects A、B、C、D をその順序で追加すると、すべて同じ「重み」で、優先度キューもその順序でそれらを返す必要があります - 1 つ以上のオブジェクトをポーリングしたとしても他のものを追加する前に。
カスタム オブジェクトの 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 の Iterator が正しい順序を返さないことを認識しているため、順序を確認する能力が限られていますが、要素がキューを離れる順序を確認でき、明らかにパスをたどっていません。私がしたいこと。
提案?