Java - 如何将一对 3 个整数推入优先队列?
Java - how to push a pair of 3 integers into Priority-Queue?
我正在尝试将 3 整数对添加到优先队列中。第一对显示没有问题,但是当我推下一对时,出现异常。这是我的代码和异常:
import java.util.*;
class pair2{
public int first, second;
public pair2(int a, int b){
this.first = a;
this.second = b;
}
}
class pair3{
public int first3;
public pair2 second3;
public pair3(int a, int b, int c){
this.first3 = a;
this.second3 = new pair2(b, c);
}
}
public class WATER{
public static void main(String args[]){
PriorityQueue<pair3> p = new PriorityQueue<pair3>();
pair3 temp = new pair3(1, 2, 3);
p.add(temp);
temp = new pair3(2, 1, 4);
p.add(temp);
while (!p.isEmpty()){
temp = p.poll();
System.out.println(temp.first3);
}
}
}
例外情况是:
Exception in thread "main" java.lang.ClassCastException: pair3 cannot be cast to java.lang.Comparable
at java.util.PriorityQueue.siftUpComparable(PriorityQueue.java:652)
at java.util.PriorityQueue.siftUp(PriorityQueue.java:647)
at java.util.PriorityQueue.offer(PriorityQueue.java:344)
at java.util.PriorityQueue.add(PriorityQueue.java:321)
at WATER.main(WATER.java:25)
我认为插入下一对时比较有问题,我不知道该怎么办。任何帮助将不胜感激。提前致谢。
你的 class pair3 必须实现 Comparable 接口!
PriorityQueue 是 binary heap
,因此项目将在 insertion/removal 时在堆中排序,并且您没有告诉它如何比较元素。您可以使 pair
实现 Comparable
或传递 Comparator
class pair3 implements Comparable<pair3>{
//
}
或提供比较器
PriorityQueue<pair3> p = new PriorityQueue<pair3>(new Comparator<>{
..
});
我正在尝试将 3 整数对添加到优先队列中。第一对显示没有问题,但是当我推下一对时,出现异常。这是我的代码和异常:
import java.util.*;
class pair2{
public int first, second;
public pair2(int a, int b){
this.first = a;
this.second = b;
}
}
class pair3{
public int first3;
public pair2 second3;
public pair3(int a, int b, int c){
this.first3 = a;
this.second3 = new pair2(b, c);
}
}
public class WATER{
public static void main(String args[]){
PriorityQueue<pair3> p = new PriorityQueue<pair3>();
pair3 temp = new pair3(1, 2, 3);
p.add(temp);
temp = new pair3(2, 1, 4);
p.add(temp);
while (!p.isEmpty()){
temp = p.poll();
System.out.println(temp.first3);
}
}
}
例外情况是:
Exception in thread "main" java.lang.ClassCastException: pair3 cannot be cast to java.lang.Comparable
at java.util.PriorityQueue.siftUpComparable(PriorityQueue.java:652)
at java.util.PriorityQueue.siftUp(PriorityQueue.java:647)
at java.util.PriorityQueue.offer(PriorityQueue.java:344)
at java.util.PriorityQueue.add(PriorityQueue.java:321)
at WATER.main(WATER.java:25)
我认为插入下一对时比较有问题,我不知道该怎么办。任何帮助将不胜感激。提前致谢。
你的 class pair3 必须实现 Comparable 接口!
PriorityQueue 是 binary heap
,因此项目将在 insertion/removal 时在堆中排序,并且您没有告诉它如何比较元素。您可以使 pair
实现 Comparable
或传递 Comparator
class pair3 implements Comparable<pair3>{
//
}
或提供比较器
PriorityQueue<pair3> p = new PriorityQueue<pair3>(new Comparator<>{
..
});