PriorityQueue怎麼用

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}

發佈了57 篇原創文章 · 獲贊 5 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章