JavaでPriorityQueueを利用しようとしています。
いくつかのカスタムオブジェクトがあり、次のようにキューに追加します。
Pet pet1 = new Pet();
Pet pet2 = new Pet();
Pet pet3 = new Pet();
PriorityQueue<Pet> queue = new PriorityQueue<Pet>();
queue.offer(pet1);
queue.offer(pet2);
queue.offer(pet3);
この時点で、PriorityQueueからClassCastExceptionを取得しないようにするには、PetオブジェクトがComparableを実装する必要があることに気付きました。そこで、PetにComparableを実装させてから、copmareTo(obj)メソッドをオーバーライドして0を返します。
しかし、奇妙なことはここにあります。私が...
queue.poll(); //return: pet1 queue: pet3, pet2
queue.poll(); //return: pet3 queue: pet2
pet1、pet2、pet3の順に追加したのに、poll()を最初に呼び出したときに、ペットのシーケンスが並べ替えられたのはなぜですか?そうすると、エントリシーケンスが保持されないため、このすべてがキューではなくなりますね。
ComparableインターフェースとcompareTo(obj)メソッドに関係しているのではないかと思います。しかし、必要なのはエントリシーケンスを維持することだけなので、実際に何かを比較したり、何かを並べ替えたりする必要はまったくありません。
キュー内のエントリシーケンスを維持するにはどうすればよいですか?
ありがとう!