PriorityQueue的使用

本文通过两个具体示例介绍了 Java 中 PriorityQueue 的使用方法。第一个示例展示了如何通过自定义比较器实现元素的逆序排列;第二个示例则通过创建 Product 类并重写 compareTo 方法实现了按产品优先级排序。

这是java类库中的一个,里面有很多方法,看帮助文档就知道,一下举出几个例子来更好的了解PriorityQueue的用法

例子一:

Code:
  1. importjava.util.*;
  2. @SuppressWarnings("rawtypes")
  3. classMouseimplementsComparable{
  4. publicinti;
  5. Mouse(inti){
  6. this.i=i;
  7. }
  8. publicStringtoString(){
  9. return"Mouse"+i;
  10. }
  11. publicintcompareTo(Objecto){
  12. assert((o!=null)&&(oinstanceofMouse));
  13. returnnewInteger(i).compareTo(((Mouse)o).i);
  14. }
  15. }
  16. publicclassTestQueue{
  17. publicstaticvoidmain(String[]args){
  18. Queue<Mouse>queue1=newPriorityQueue<Mouse>();
  19. PriorityQueue<Mouse>queue2=newPriorityQueue<Mouse>(1,newComparator<Mouse>()//大数在队列头
  20. {
  21. publicintcompare(Mouseo1,Mouseo2)
  22. {
  23. returno2.i-o1.i;
  24. }
  25. });
  26. for(inti=5;i>-1;i--){
  27. queue1.add(newMouse(i));
  28. queue2.add(newMouse(i));
  29. }
  30. for(inti=5;i>-1;i--)
  31. System.out.println(queue1.poll());
  32. for(inti=5;i>-1;i--)
  33. System.out.println(queue2.poll());
  34. }
  35. }

例子二:

Code:
  1. importjava.util.Comparator;
  2. importjava.util.PriorityQueue;
  3. enumProductQuality{
  4. High,Medium,Low
  5. }
  6. classProductimplementsComparable<Product>{
  7. Stringname;
  8. ProductQualitypriority;
  9. Product(Stringstr,ProductQualitypri){
  10. name=str;
  11. priority=pri;
  12. }
  13. publicintcompareTo(Productmsg2){
  14. returnpriority.compareTo(msg2.priority);
  15. }
  16. }
  17. classMessageComparatorimplementsComparator<Product>{
  18. publicintcompare(Productmsg1,Productmsg2){
  19. returnmsg2.priority.compareTo(msg1.priority);
  20. }
  21. }
  22. publicclassMain{
  23. publicstaticvoidmain(Stringargs[]){
  24. PriorityQueue<Product>pq=newPriorityQueue<Product>(3);
  25. pq.add(newProduct("A",ProductQuality.Low));
  26. pq.add(newProduct("B",ProductQuality.High));
  27. pq.add(newProduct("C",ProductQuality.Medium));
  28. Productm;
  29. while((m=pq.poll())!=null)
  30. System.out.println(m.name+"Priority:"+m.priority);
  31. PriorityQueue<Product>pqRev=newPriorityQueue<Product>(3,newMessageComparator());
  32. pqRev.add(newProduct("D",ProductQuality.Low));
  33. pqRev.add(newProduct("E",ProductQuality.High));
  34. pqRev.add(newProduct("F",ProductQuality.Medium));
  35. while((m=pqRev.poll())!=null)
  36. System.out.println(m.name+"Priority:"+m.priority);
  37. }
  38. }

主要是要重写compareTo()这个方法,使之达到自己想要的排序方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值