前程无忧做网站多少钱,wordpress发件人,九一人才网赣州找工作,广西住建厅考试培训中心PriorityQueue有一个特征需要特别注意#xff0c;即#xff1a;对于那些通过排序方法判定为“相等”的元素#xff0c;在通过poll方法依次取出它们时#xff0c;它们的顺序是不确定的#xff0c;特别是不会维持插入的顺序。举例说明#xff1a;假如一个对象Obj#xff0…PriorityQueue有一个特征需要特别注意即对于那些通过排序方法判定为“相等”的元素在通过poll方法依次取出它们时它们的顺序是不确定的特别是不会维持插入的顺序。举例说明假如一个对象Obj有a,b两个字段如果Obj对象是按字段a由小到大进行排序的当向队列依次插入a,b分别为(1,1)(2,1)(1,2)(2,2)(1,3)的五个元素时通过poll方法从队头依次取出的元素会是什么呢首先一定可以确定的是(1,1)(1,2)(1,3)一定会排在前面(2,1)(2,2)一定会排在后面问题在于(1,1)(1,2)(1,3)之间和(2,1)(2,2)之间是如果排序的习惯上我们希望它们保留插入时的顺序但是实际上在PriorityQueue在进行内部排序时它们的原始插入顺序都被破坏了所以实际的输出时相等元素之间的顺序是不确定的。以下是一段验证程序import java.util.*;public class Test1 {public static void main(String[] args) {PriorityQueue q new PriorityQueue();q.add(new Obj(1,1));q.add(new Obj(2,1));q.add(new Obj(1,2));q.add(new Obj(2,2));q.add(new Obj(1,3));int size q.size();for (int i 0; i size; i) {System.out.println(q.poll());}System.out.println(--------------------------);List l new ArrayList();l.add(new Obj(1, 1));l.add(new Obj(2, 1));l.add(new Obj(1, 2));l.add(new Obj(2, 2));l.add(new Obj(1, 3));Collections.sort(l);for (Obj obj : l) {System.out.println(obj);}}public static class Obj implements Comparable {int a;int b;public Obj(int a, int b) {this.a a;this.b b;}Overridepublic String toString() {return Obj{ a a , b b ‘}‘;}Overridepublic int compareTo(Obj o) {return a - o.getA();}public int getA() {return a;}public void setA(int a) {this.a a;}public int getB() {return b;}public void setB(int b) {this.b b;}}}程序的输出是Obj{a1, b1}Obj{a1, b3}Obj{a1, b2}Obj{a2, b2}Obj{a2, b1}--------------------------Obj{a1, b1}Obj{a1, b2}Obj{a1, b3}Obj{a2, b1}Obj{a2, b2}请注意前半段使用PriorityQueue(1,1)(1,2)(1,3)三者的实际顺序是(1,1)(1,3)(1,2)。 而使用排序方法排序得到的是我们期望的顺序。这就是PriorityQueue在排序上的一个微妙的地方。原文http://blog.csdn.net/yusiguyuan/article/details/20215591