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());
}
}