日期:2014-05-20 浏览次数:20971 次
PriorityQueue<MyThread> q = new PriorityQueue<MyThread>(10, new Comparator<MyThread>() {
public int compare(MyThread o1, MyThread o2) {
return o1.weight - o2.weight;
}
});
q.offer(new MyThread(5));
q.offer(new MyThread(7));
q.offer(new MyThread(2));
q.offer(new MyThread(6));
q.offer(new MyThread(8));
System.out.println(Arrays.toString(q.toArray()));
------解决方案--------------------
PriorityQueue内部成员数组queue其实是实现了一个二叉树的数据结构,因此它的排序其实是排序的二叉树,因此它的树的根即第一个元素都是最小的元素
当每次从PriorityQueue中取数据的时候,你会发现它后面几个元素的排序会变化的,而且都是有规律的
PriorityQueue<String> pq = new PriorityQueue<String>();
pq.add("dog");
pq.add("apple");
pq.add("fox");
pq.add("easy");
pq.add("boy");
//
while(!pq.isEmpty()){
for(String s:pq){
System.out.print(s+" ");
}
System.out.println();
System.out.println("Priority.poll() : "+pq.poll());
}
------解决方案--------------------
无论你怎么顺序添加,PriorityQueue都会保证顺序取出的。这个你随便找个代码测试一下就行了(别用你自己的类,用什么String之类就非常清楚了)
------解决方案--------------------
你在多线程共享这个队列的情况下不能使用 PriorityQueue,而应该使用 PriorityBlockingQueue