Joh*_*ter 7 java priority-queue comparable
我刚刚学习了优先级队列,并且认为我会尝试使用类似的界面来表现它.
代码片段:
import java.util.PriorityQueue;
class kinga implements Comparable<Double> {
double time=909.909;
double d;
public kinga(double a) {
this.d=a;
}
public int compareTo(Double d) {
return Double.compare(d, time);
}
public static void main(String arg[]) {
PriorityQueue<kinga> r=new PriorityQueue<kinga>();
r.add( new kinga(4545.45));
r.add( new kinga(45.4));
r.add( new kinga(1235.45));
System.out.println(r.poll()+" "+r.poll()+" "+r.poll());
}
}
Run Code Online (Sandbox Code Playgroud)
它编译但在线程"main"中 给出了Exception java.lang.ClassCastException: kinga cannot be cast to java.lang.Double.
这里有什么问题.有人能告诉我可比性和优先级队列的工作原理吗?
kinga应该是可比的kinga,不是Double,所以:
class kinga implements Comparable<kinga>
Run Code Online (Sandbox Code Playgroud)
这意味着您的compareTo方法必须更改为:
public int compareTo(kinga o) {
return Double.compare(o.d, d);
}
Run Code Online (Sandbox Code Playgroud)
class kinga implements Comparable<Double>
Run Code Online (Sandbox Code Playgroud)
这没有意义.虽然你的课程会与Double相提并论,但是Double并没有意识到这一点,并且不会与kinga的实例进行比较,这将打破可比较合同.而且由于一个王国无法与另一个王者相比,你不能使用PriorityQueue<kinga>.
它应该是
class Kinga implements Comparable<Kinga>
Run Code Online (Sandbox Code Playgroud)
(注意大写,以尊重Java命名约定),这意味着:Kinga实例是可比较的.
compareTo方法应该是
@Override
public int compareTo(Kinga other) {
return Double.compare(this.d, other.d);
}
Run Code Online (Sandbox Code Playgroud)
这意味着:如果我d比其他Kinga更大,我比另一个Kinga 更大d.
| 归档时间: |
|
| 查看次数: |
17297 次 |
| 最近记录: |