下面这段程序,定义类型Ob实现接口Comparable<Ob>,用于可排序的容器,在main方法中,定义8个Ob对象,然后按照任意顺序插入到优先级队列中,打印输出,发现并不是按照优先级排序的,然后修改其中三个对象的优先级,然后再输出,对象的优先级修改成功,但是排序依然是混乱的,最后一次移除队列中的元素并输出,发现输出的元素依然不是按照优先级排序的...
这个优先级队列 既不是在插入元素时对元素排序,也不是在移除元素时对元素排序,那还有什么用呢?有人知道是怎么回事吗?哪个地方有问题?
package concurrency;
import java.util.*;
//MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
class Ob implements Comparable<Ob> {
//---------------------------------------------------
public Ob(int priority) {this.priority = priority;}
//---------------------------------------------------
public void setPriority(int priority) {this.priority = priority;}
//---------------------------------------------------
@Override
public int compareTo(Ob ob)
{
return (priority < ob.priority)? -1 : ((priority == ob.priority)? 0 : 1);
}
//---------------------------------------------------
@Override
public String toString() {return "i" + id + "@p" + priority;}
//---------------------------------------------------
private static int counter = 1;
private final int id = counter++;
private int priority;
}
//MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
public class TestQueue {
//---------------------------------------------------
public static void main(String[] args) throws Exception
{
Queue<Ob> p = new PriorityQueue<Ob>();
Ob ob1 = new Ob(1);
Ob ob2 = new Ob(2);
Ob ob3 = new Ob(3);
Ob ob4 = new Ob(4);
Ob ob5 = new Ob(5);
Ob ob6 = new Ob(6);
Ob ob7 = new Ob(7);
Ob ob8 = new Ob(8);
p.offer(ob7);
p.offer(ob2);
p.offer(ob3);
p.offer(ob4);
p.offer(ob5);
p.offer(ob6);
p.offer(ob8);
p.offer(ob1);
System.out.println(p);
ob1.setPriority(0);
ob5.setPriority(1);
ob7.setPriority(2);
System.out.println(p);
while(p.peek() != null) System.out.println(p.poll() + ", ");
}
}
/* 输出结果:
[i1@p1, i2@p2, i3@p3, i4@p4, i5@p5, i6@p6, i8@p8, i7@p7]
[i1@p0, i2@p2, i3@p3, i4@p4, i5@p1, i6@p6, i8@p8, i7@p2]
i1@p0,
i7@p2,
i2@p2,
i5@p1,
i3@p3,
i4@p4,
i6@p6,
i8@p8,
*/ |
|