PriorityQueue 정렬 방식을 언제 설정해야 할까?

김성수·2023년 5월 23일
0

Java

목록 보기
8/18

들어가면서

PriorityQueue를 사용할 때 정렬 방식을 설정해주지 않고 사용하다가
java.lang.ClassCastException 에러를 마주했다.
PriorityQueue를 사용할 때 정렬 방식을 설정해줘야 하는 이유와,
설정해주지 않아도 되는 경우에 대해서 알아보았다.



어쩌다 문제에 직면했을까?

다익스트라 알고리즘을 풀다가 PriorityQueue에 임의의 객체를 반환해주도록 초기화 해주고 클래스를 실행하니 error 발생하였다.

(해당 알고리즘 문제의 자세한 내용 : https://velog.io/@ni0307/greedy-%EB%8B%A4%EC%9D%B5%EC%8A%A4%ED%8A%B8%EB%9D%BC-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98)

PriorityQueue를 사용할 때 정렬 방식을 설정해준 적이 없었는데 왜 그런걸까?라는 의문이 들었고

이유를 찾아보았다.

그 이유는 아래에서 설명한다.



PriorityQueue 정렬 방식을 설정하지 않아도 되었던 이유

Java에서 제공하는 Integer, String, Double 같은 기본적인 객체들은 이미 클래스 내부에 정렬 방식이 탑재되어 있다.

그래서 PriorityQueue 반환 타입으로 설정했을 때 따로 compareTo() 메서드로 정렬해줄 필요가 없었다.


// 정렬 방식 설정 x
PriorityQueue<PriorityQueue> pQ = new PriorityQueue<>();



정렬 방식을 설정해야 하는 경우

PriorityQueue의 반환 타입이 임의의 객체일 때 정렬 방식이 제공되지 않으므로

아래와 같은 에러가 발생한다.


java.lang.ClassCastException


PriorityQueue는 우선순위를 기준으로 먼저 반환해주기 때문에 우선순위 설정을 해줘야 한다.

여태까지 우선순위가 while문이나 if문에서 설정해주는거라고 착각하고 있었는데,

객체 내부에서 우선순위가 정해지고 pQ는 그저 반환만 해주는 녀석이었다.

지금이라도 알게되어서 다행이다..



알게된 점

PriorityQueue가 정렬 설정을 해줘야 하는 경우

어떤 상황에 PriorityQueue를 정렬해줘야 할지 알게되었다.

다익스트라 알고리즘 같은 문제를 풀 때 적극적으로 사용하면 좋을 것 같다.

profile
깊이 있는 소프트웨어 개발자가 되고 싶습니다.

0개의 댓글