PriorityQueue的使用

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

例子一:

Code:
  1. import   java.util.*;    
  2.   
  3. @SuppressWarnings("rawtypes")   
  4. class Mouse implements Comparable {    
  5.     public   int   i;    
  6.     Mouse(int   i){    
  7.         this.i=i;    
  8.     }    
  9.     public String toString(){   
  10.         return   "Mouse   "+i;   
  11.     }    
  12.     public   int   compareTo(Object   o){    
  13.         assert   ((o!=null)&&(o   instanceof   Mouse));    
  14.         return   new   Integer(i).compareTo(((Mouse)o).i);    
  15.     }    
  16. }    
  17. public   class   TestQueue {    
  18.     public   static   void   main(String[]   args){    
  19.         Queue<Mouse> queue1=new PriorityQueue<Mouse>();    
  20.         PriorityQueue<Mouse> queue2 = new PriorityQueue<Mouse>(1new Comparator<Mouse>()// 大数在队列头   
  21.                 {   
  22.                     public int compare(Mouse o1, Mouse o2)   
  23.                     {   
  24.                         return o2.i- o1.i;   
  25.                     }   
  26.                 });   
  27.         for(int   i=5;i> -1;i--){   
  28.             queue1.add(new Mouse(i));    
  29.             queue2.add(new Mouse(i));   
  30.         }   
  31.         for(int i=5;i>-1;i--)    
  32.               System.out.println(queue1.poll());    
  33.         for(int i=5;i>-1;i--)    
  34.               System.out.println(queue2.poll());    
  35.     }    
  36. }   

例子二:

Code:
  1. import java.util.Comparator;   
  2. import java.util.PriorityQueue;   
  3.   
  4. enum ProductQuality {   
  5.   High, Medium, Low   
  6. }   
  7.   
  8. class Product implements Comparable<Product> {   
  9.   String name;   
  10.   
  11.   ProductQuality priority;   
  12.   
  13.   Product(String str, ProductQuality pri) {   
  14.     name = str;   
  15.     priority = pri;   
  16.   }   
  17.   
  18.   public int compareTo(Product msg2) {   
  19.     return priority.compareTo(msg2.priority);   
  20.   }   
  21. }   
  22.   
  23. class MessageComparator implements Comparator<Product> {   
  24.   public int compare(Product msg1, Product msg2) {   
  25.     return msg2.priority.compareTo(msg1.priority);   
  26.   }   
  27. }   
  28.   
  29. public class Main {   
  30.   public static void main(String args[]) {   
  31.   
  32.     PriorityQueue<Product> pq = new PriorityQueue<Product>(3);   
  33.   
  34.     pq.add(new Product("A", ProductQuality.Low));   
  35.     pq.add(new Product("B", ProductQuality.High));   
  36.     pq.add(new Product("C", ProductQuality.Medium));   
  37.     Product m;   
  38.     while ((m = pq.poll()) != null)   
  39.       System.out.println(m.name + " Priority: " + m.priority);   
  40.   
  41.     PriorityQueue<Product> pqRev = new PriorityQueue<Product>(3new MessageComparator());   
  42.   
  43.     pqRev.add(new Product("D", ProductQuality.Low));   
  44.     pqRev.add(new Product("E", ProductQuality.High));   
  45.     pqRev.add(new Product("F", ProductQuality.Medium));   
  46.   
  47.     while ((m = pqRev.poll()) != null)   
  48.       System.out.println(m.name + " Priority: " + m.priority);   
  49.   }   
  50. }    

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PriorityQueueJava中的一个实现了Queue接口的类,它是基于优先级堆的数据结构。PriorityQueue常用于需要根据元素的优先级来进行排序和处理的场景。下面是PriorityQueue使用方法: 1. 创建PriorityQueue对象:可以使用无参构造函数创建一个默认的PriorityQueue对象,也可以使用带有Comparator参数的构造函数来定义自定义的排序规则。 2. 添加元素:可以使用`offer(E e)`方法向PriorityQueue中添加元素,该方法会根据元素的优先级将元素插入到正确的位置。 3. 删除元素:可以使用`poll()`方法从PriorityQueue中删除并返回队头的元素,该方法会同时调整剩余元素的顺序,使得队列继续保持有序状态。 4. 获取队头元素:可以使用`peek()`方法获取队头的元素,该方法不会删除元素。 5. 判断队列是否为空:可以使用`isEmpty()`方法判断PriorityQueue是否为空。 下面是一个示例代码,展示了PriorityQueue使用方法: ``` PriorityQueue<Integer> p = new PriorityQueue<>(); p.offer(5); p.offer(1); p.offer(3); p.offer(6); p.offer(8); while (!p.isEmpty()) { System.out.println(p.poll()); } ``` 以上代码会输出排序后的元素:1, 3, 5, 6, 8。 如果你想改变PriorityQueue的排序规则,你可以使用带有Comparator参数的构造函数或者在创建PriorityQueue对象后使用`comparator()`方法进行设置。例如: ``` PriorityQueue<Integer> queue = new PriorityQueue<>((o1, o2) -> o2 - o1); ``` 以上代码会创建一个按照从大到小排序的PriorityQueue对象。或者: ``` PriorityQueue<Integer> queue = new PriorityQueue<>(Comparator.reverseOrder()); ``` 以上代码也会创建一个按照从大到小排序的PriorityQueue对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值