[알고리즘] Priority Queue 사용법

Priority Queue 사용법

Priority Queue 선언

import java.util.PriorityQueue; //import

//int형 priorityQueue 선언 (우선순위가 낮은 숫자 순) -1,2,3,4,5
PriorityQueue<Integer> priorityQueue = new PriorityQueue<>();


//int형 priorityQueue 선언 (우선순위가 높은 숫자 순) 5, 4, 3,2,-1
PriorityQueue<Integer> priorityQueue = new PriorityQueue<>(Collections.reverseOrder());

//String형 priorityQueue 선언 (우선순위가 낮은 숫자 순)
PriorityQueue<String> priorityQueue = new PriorityQueue<>(); 

//String형 priorityQueue 선언 (우선순위가 높은 숫자 순)
PriorityQueue<String> priorityQueue = new PriorityQueue<>(Collections.reverseOrder());

객체 Priority Queue

class Vehicle implements Comparable<Vehicle>{
    private String name;
    private int time;
    
    public Vehicle(String name, int time) {
        this.name = name;
        this.time = time;
    }
    public String getName() {
        return this.name;
    }
    public int getTime() {
        return this.time;
    }
    
    @Override
    public int compareTo(Vehicle target) {
        // 자신의 값이 작으면 -1
        // 자신의 값과 같으면 0
        // 자신보다 값이 크면 1
        // this 즉 내 자신이 target 받아오는 것보다 작으면 앞으로(-1) 내 자신이 크면 뒤로			// 가겠따는 의미(1)
        if(this.time < target.getTime()) return -1;
        else if(this.time > target.getTime()) return 1;
        return 0;
    }
}

//main
PriorityQueue<Vehicle> pQueue = new PriorityQueue<Vehicle>();
        
        pQueue.offer(new Vehicle("대중교통", 70));
        pQueue.offer(new Vehicle("자가용", 45));
        pQueue.offer(new Vehicle("도보", 400));
        pQueue.offer(new Vehicle("자전거", 125));
        
        while(!pQueue.isEmpty()) {
            Vehicle v = pQueue.poll();
            System.out.println(v.getName() + " 시간 :" + v.getTime());
            
            
// 결과
자가용 시간 :45
대중교통 시간 :70
자전거 시간 :125
도보 시간 :400