我正在尝试使用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)方法有关。但我所需要的只是保持它的输入顺序,所以我根本不需要比较任何东西或排序任何东西。
如何在队列中维护其条目顺序?
谢谢