경험의 기록

fun main(){
    val queue = PriorityQueue<Int>()

    queue.add(3)
    queue.add(2)
    queue.add(4)

    println(queue)
}

정수형의 경우, 기본으로 크기를 비교할 수 있기 때문에 우선순위큐에서 오름차순으로 자동 정렬해준다.

 

import java.util.*

data class Node(
    val index : Int,
    val value : Int
)

fun main(){
    val queue = PriorityQueue<Node>()

    queue.add(Node(0,5))
    queue.add(Node(2,3))
    queue.add(Node(1,100))

    println(queue.poll())
    println(queue.poll())
    println(queue.poll())
}

하지만 데이터 클래스 등을 사용할 경우

어느 기준으로 비교해야하는지 알수 없기 때문에 오류가 발생한다.

 

따라서

import java.util.*

data class Node(
    val index : Int,
    val value : Int
) : Comparable<Node> {
    override fun compareTo(other: Node): Int = index - other.index

}

fun main(){
    val queue = PriorityQueue<Node>()

    queue.add(Node(0,5))
    queue.add(Node(2,3))
    queue.add(Node(1,100))

    println(queue.poll())
    println(queue.poll())
    println(queue.poll())
}

Comparable 클래스의 compareTo를 오버라이드하여

Data Class 끼리 비교해야할 때 (정렬할 때) 기준점을 정해줄 수 있다.

 

위의 경우에는 index 기준으로 오름차순 출력하도록 하였다.

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading