Exception in thread "main" java.lang.ClassCastException: class [I cannot be cast to class java.lang.Comparable ([I and java.lang.Comparable are in module java.base of loader 'bootstrap')
Exception in thread "main" java.lang.ClassCastException: class [I cannot be cast to class java.lang.Comparable ([I and java.lang.Comparable are in module java.base of loader 'bootstrap')
자바에서 알고리즘을 풀 때, 보통은 클래스를 만들고 클래스를 PQ에 담아준다.
클래스를 만드는데, 시간이 조금 걸리지만 제대로 잘 만들면 이후 알고리즘을 짤 때 코드를 보면서 헷갈리지 않기 때문이다.
그런데, 함께 공부하는 친구들의 코드를 보니 int[] 형식으로 많이 써주기도 하는것을 알게 되었다.
나도 어떤 방법이 더 편한지 시도해보다가 만나게 된 에러였다.
바로 pq를 할 때, 어떤 정렬기준으로 정렬할 지 정해주지 않았기 때문이다.
int[] 배열은 자바에서 Comparable 인터페이스를 구현하지 않기 때문에, 배열들을 자동으로 비교하고 정렬할 수 없다고 한다.
그래서 반드시, 명시적으로 지정해줘야 한다는 것을 알게 되었다.
다른 사람의 풀이 방법을 따라해보면서, 하나씩 배워간다!
//PriorityQueue<int[]> pq = new PriorityQueue<>();
PriorityQueue<int[]> pq = new PriorityQueue<>((a, b) -> Integer.compare(a[0], b[0]));
pq.add(new int[] {1, 0});
while(!pq.isEmpty()) {
int[] cur = pq.poll();
int curMem = cur[0];
int curP = cur[1];
if(dist[curMem] != curP) continue;
for(int[] nx: graph[curMem]) {
int nxMem = nx[0];
int nxP = nx[1];
if(dist[nxMem] >= dist[curMem] + nxP) continue;
dist[nxMem] = dist[curMem] + nxP;
pq.add(new int[] {nxMem, dist[nxMem]});
}
System.out.println("s");
}
'언어(Language) > JAVA' 카테고리의 다른 글
[JAVA] 예외(Exception)는 어디서 처리하는게 좋을까? (0) | 2024.07.24 |
---|---|
내가 생각하는 SOLID원칙 (0) | 2024.07.12 |
[JAVA] 생성자도 상속이 된다는 입장에서 쓰는 글 (0) | 2024.07.04 |
[Java] Java는 컴파일과 인터프리터 중 어떤 언어에 속할까? (0) | 2024.02.01 |
[java/error] Exception in thread "main" java.util.IllegalFormatConversionException: f != java.lang.Integer (0) | 2023.01.24 |