2015-05-06 4 views
2

Согласно docs, элементы очереди приоритета упорядочены в соответствии с естественным порядком, то как же он печатает по-другомуЕстественный порядок элементов в приоритетной очереди

public class PQ2 { 

public static void main(String[] args) { 
    PriorityQueue<Integer> pq = new PriorityQueue<Integer>(); 
    pq.add(2); 
    pq.add(4); 
    System.out.println(pq); 
    pq.offer(1); 
    System.out.println(pq); 
    pq.add(3); 
    System.out.println(pq); 
} 
} 
+0

Док утверждает: _ «Возвращает итератор по элементам в этой очереди. Итератор не возвращает элементы в каком-либо конкретном порядке». Поскольку 'toString()' использует итератор для создания содержимого в String, вы не можете делать никаких предположений. –

+0

@AlexisC. Шутки в сторону? Это вопрос от scjp kathy & berts. Как я могу ответить на это? В любом случае, спасибо за ответ – kittu

+0

На какой странице? –

ответ

1

Порядок элементы отпечатаны определяется итератор PriorityQueue класса, который не заказанной:

/** 
* Returns an iterator over the elements in this queue. The iterator 
* does not return the elements in any particular order. 
* 
* @return an iterator over the elements in this queue 
*/ 
public Iterator<E> iterator() { 
    return new Itr(); 
} 

PriorityQueuetoString() использует реализацию AbstractCollection, которая использует iterator() метод для итерации по элементам.

Это не имеет никакого отношения к порядку, в котором элементы будут удалены из очереди, что соответствует естественному порядку.