在PriorityQueue中维护条目序列

Car*_*ven 0 java queue priority-queue comparable

我试图在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);
Run Code Online (Sandbox Code Playgroud)

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

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

queue.poll();  //return: pet1  queue: pet3, pet2
queue.poll();  //return: pet3  queue: pet2
Run Code Online (Sandbox Code Playgroud)

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

我怀疑它可能与Comparable接口和compareTo(obj)方法有关.但我所需要的只是保持其输入序列,所以我真的不需要比较任何东西或任何东西.

如何在队列中维护其输入序列?

谢谢!

RMT*_*RMT 7

为了保存序列,您必须使用普通队列.

你将不得不创建一个类似于Queue 的LinkedList链表实现的实例