A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

下面这段程序,定义类型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,
*/
您需要登录后才可以回帖 登录 | 加入黑马