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);

此时,我意识到我的 Pet 对象必须实现 Comparable 才能不从 PriorityQueue 中获取 ClassCastException。所以我让我的 Pet 实现 Comparable,然后只返回 0 覆盖 copmareTo(obj) 方法。

但奇怪的是这里。当我...

queue.poll();  //return: pet1  queue: pet3, pet2
queue.poll();  //return: pet3  queue: pet2

既然我按 pet1、pet2 和 pet3 的顺序添加了它们,为什么在我第一次调用 poll() 时,它会对我的宠物序列进行排序?然后整个事情不再是一个队列,因为它的入口序列没有被保留,不是吗?

我怀疑它可能与 Comparable 接口和 compareTo(obj) 方法有关。但我所需要的只是让它保持其输入顺序,所以我根本不需要比较任何东西或对任何东西进行排序。

如何维护其在队列中的进入顺序?

谢谢!

4

1 回答 1

7

为了保留序列,您必须使用普通的Queue

您将不得不从 Queue创建一个类似LinkedList链表的实例

于 2011-05-27T18:23:35.727 回答