0

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)メソッドに関係しているのではないかと思います。しかし、必要なのはエントリシーケンスを維持することだけなので、実際に何かを比較したり、何かを並べ替えたりする必要はまったくありません。

キュー内のエントリシーケンスを維持するにはどうすればよいですか?

ありがとう!

4

1 に答える 1

7

シーケンスを保持するには、通常のキューを使用する必要があります。

LinkedListリンクリストがQueueから実装するようなインスタンスを作成する必要があります

于 2011-05-27T18:23:35.727 に答える