2011-10-28 48 views
7

Tôi có một chương trình java mà đi nhưJava: Queue ưu tiên

public class PriorityQueueExample này {

public static void main(String[] args) { 
    PriorityQueue<Integer> pq = new PriorityQueue<Integer>(); 
    pq.add(10); 
    pq.add(1); 
    pq.add(9); 
    pq.add(2); 
    pq.add(8); 
    pq.add(3); 
    pq.add(7); 
    pq.add(4); 
    pq.add(6); 
    pq.add(5); 
System.out.println(pq); 

} 

}

Câu hỏi của tôi là lý do tại sao không hàng đợi ưu tiên sắp xếp chúng. Theo thông số kỹ thuật java, nó thực hiện so sánh và duy trì thứ tự sắp xếp (phân loại tự nhiên)

Kết quả đầu ra của tôi như sau: [1, 2, 3, 4, 5, 9, 7, 10, 6, 8 ]

Trả lời

7

Chèn vào hàng đợi ưu tiên không đủ để sắp xếp danh sách các phần tử vì nó không lưu trữ chúng theo thứ tự được sắp xếp; nó lưu trữ chúng theo thứ tự heap được sắp xếp một phần. Bạn cần phải loại bỏ các yếu tố trong một vòng lặp để sắp xếp chúng:

while (pq.size() > 0) 
    System.out.println(pq.remove()); 
7

Người ta sắp xếp, nhưng trong nội bộ các yếu tố được lưu trữ trong một đống. Nếu bạn gọi peek(), poll() hoặc remove(), bạn sẽ nhận được đúng thứ tự (và đó là cách bạn truy cập hàng đợi).