Поддерживать последовательность ввода в PriorityQueue - PullRequest
0 голосов
/ 27 мая 2011

Я пытаюсь использовать PriorityQueue в Java.

У меня есть несколько пользовательских объектов, и я добавляю их в очередь следующим образом:

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, чтобы не получать ClassCastException от PriorityQueue. Таким образом, мой 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). Но все, что мне нужно, это чтобы он поддерживал свою последовательность ввода, поэтому мне не нужно ничего сравнивать или сортировать вообще.

Как сохранить последовательность ввода в очереди?

Спасибо!

1 Ответ

7 голосов
/ 27 мая 2011

Чтобы сохранить последовательность, вы должны использовать обычную очередь .

, вам нужно будет создать экземпляр чего-то вроде LinkedList орудия связанного спискаОчередь

...