package com.bjsxt.base.coll013; public class Task implements Comparable<Task>{ private int id ; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public int compareTo(Task task) { // TODO Auto-generated method stub //按照id进行升序排序 //如果对象本身的id大于传入的对象id, //返回值是正数,就是升序排序 //返回值是负数,就是降序排序 // if(id>o.getId()) { // return 1; // } else if(id==o.getId()) { // return 0; // } // return -1; // return name.compareTo(o.getName()); if(this.id > task.id) { return -1; } else if(this.id == task.id) { return 0; } return 1; } public String toString(){ return this.id + "," + this.name; } }
package com.bjsxt.base.coll013; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.concurrent.PriorityBlockingQueue; /** * @author Administrator *PriorityBlockingQueue:基于优先级的堵塞队列。无界队列,队列对象必须实现Comparable接口。 *注意:添加一个元素不会排序,只有调用task方法取行数的时候才会比较取值。 */ public class UsePriorityBlockingQueue { public static void main(String[] args) throws Exception{ PriorityBlockingQueue<Task> q = new PriorityBlockingQueue<Task>(); Task t1 = new Task(); t1.setId(40); t1.setName("id为3"); Task t2 = new Task(); t2.setId(30); t2.setName("id为4"); Task t3 = new Task(); t3.setId(10); t3.setName("id为1"); //return this.id > task.id ? 1 : 0; q.add(t2); //4 q.add(t1); //3 q.add(t3); //1 // 1 3 4 System.out.println("容器:" + q); System.out.println(q.take().getId()); //System.out.println("容器:" + q); System.out.println(q.take().getId()); System.out.println(q.take().getId()); } }