Đây là trực tiếp từ Java Docs:Trình lặp lặp tích hợp cho PriorityQueue của java không đi qua cấu trúc dữ liệu theo bất kỳ thứ tự cụ thể nào. Tại sao?
này lớp và iterator của mình thực hiện tất cả các phương pháp bắt buộc các giao diện Collection và Iterator. Iterator được cung cấp trong phương thức iterator() không được bảo đảm để duyệt qua các phần tử của hàng đợi ưu tiên theo bất kỳ thứ tự cụ thể nào. Nếu bạn cần traversal có trật tự, hãy xem xét sử dụng Arrays.sort (pq.toArray()).
Vì vậy, về cơ bản, PriorityQueue của tôi hoạt động tốt, nhưng in nó ra màn hình sử dụng phương pháp riêng của nó được xây dựng trong toString() khiến tôi thấy bất thường này trong hành động, và đã tự hỏi nếu ai đó có thể giải thích lý do tại sao nó là trình vòng lặp được cung cấp (và được sử dụng trong nội bộ) không đi qua PriorityQueue theo thứ tự tự nhiên của nó?
Điều đó không hoàn toàn đúng. Heap cũng có bảo đảm rằng x [i] <= x [2i] <= x [2i + 1]. – EJP