对集合使用Comparator
1 import java.util.Comparator; 2 import java.util.PriorityQueue; 3 4 /** 5 * 对集合使用Comparator,不改变对象的自然顺序 6 * @author Administrator 7 * 8 */ 9 public class PriMsgQDemo { 10 public static void main(String[] args) { 11 Message m; 12 //自然顺序排列 13 PriorityQueue<Message> pq = new PriorityQueue<Message>(3); 14 15 pq.add(new Message("Message at main office at 3pm", Message.PLevel.Low)); 16 pq.add(new Message("Fire in warehouse!", Message.PLevel.High)); 17 pq.add(new Message("Report due Tuesday", Message.PLevel.Medium)); 18 19 System.out.println("Message in natural-order priority: "); 20 while((m = pq.poll()) != null){ 21 System.out.println(m.msg+"Priority: " + m.priority); 22 } 23 System.out.println(); 24 //使用比较器 25 PriorityQueue<Message> pqRev = new PriorityQueue<Message>(3, new RevMsgComparer()); 26 27 pqRev.add(new Message("Message at main office at 3pm", Message.PLevel.Low)); 28 pqRev.add(new Message("Fire in warehouse!", Message.PLevel.High)); 29 pqRev.add(new Message("Report due Tuesday", Message.PLevel.Medium)); 30 31 System.out.println("Message in reverse-order priority: "); 32 while((m = pqRev.poll()) != null){ 33 System.out.println(m.msg+"Priority: " + m.priority); 34 } 35 } 36 } 37 38 class Message implements Comparable<Message>{ 39 40 String msg; 41 enum PLevel { 42 High, Medium, Low 43 } 44 45 PLevel priority; 46 public Message(String str, PLevel pri) { 47 msg = str; 48 priority = pri; 49 } 50 51 @Override 52 public int compareTo(Message o) { 53 return priority.compareTo(o.priority); 54 } 55 56 } 57 58 class RevMsgComparer implements Comparator<Message>{ 59 60 @Override 61 public int compare(Message o1, Message o2) { 62 return o2.priority.compareTo(o1.priority); 63 } 64 65 }