PriorityQueue簡介
PriorityQueue是基於優先級堆的無界優先級隊列。
他們的元素可按自然排序,也可在創建ProorityQueue實例時指定比較器。
不能添加null對象,也不能添加不可比對象,這樣會拋出ClassCastException異常。
怎麼用
採用自然排序的方式
import java.util.PriorityQueue;
public class PriorityQueueTest {
private static PriorityQueue priorityQueue = new PriorityQueue();
public static void main(String[] args) {
priorityQueue.add(new Item(10));
priorityQueue.add(new Item(20));
priorityQueue.add(new Item(60));
priorityQueue.add(new Item(30));
priorityQueue.add(new Item(40));
priorityQueue.add(new Item(50));
while (true) {
Object poll = priorityQueue.poll();
if(poll != null){
System.out.println(poll);
}else{
break;
}
}
}
}
class Item implements Comparable<Item>{
private int age;
public Item(int age) {
this.age = age;
}
@Override
public String toString() {
return "Item{" +
"age=" + age +
'}';
}
@Override
public int compareTo(Item o) {
return this.age - o.age;//從小到大
}
}
採用指定比較器的方式
import java.util.Comparator;
import java.util.PriorityQueue;
/**
* @Description
* @Auther sty
* @createTime 2018/9/18 下午6:07
*/
public class PriorityQueueTest {
private static PriorityQueue priorityQueue = new PriorityQueue(new Comparator<Item>() {
@Override
public int compare(Item o1, Item o2) {
return o1.getAge() - o2.getAge();
}
});
public static void main(String[] args) {
priorityQueue.add(new Item(10));
priorityQueue.add(new Item(20));
priorityQueue.add(new Item(60));
priorityQueue.add(new Item(30));
priorityQueue.add(new Item(40));
priorityQueue.add(new Item(50));
while (true) {
Object poll = priorityQueue.poll();
if(poll != null){
System.out.println(poll);
}else{
break;
}
}
}
}
class Item{
private int age;
public Item(int age) {
this.age = age;
}
@Override
public String toString() {
return "Item{" +
"age=" + age +
'}';
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
Item{age=10}
Item{age=20}
Item{age=30}
Item{age=40}
Item{age=50}
Item{age=60}