当前位置: 首页 > 知识库问答 >
问题:

Java优先级队列和类似接口

陆绪
2023-03-14

我刚刚学习了优先级队列,我想试试它在类似界面上的表现。

代码片段:

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());
    }
}

它编译,但在线程"main"中给我异常java.lang.ClassCastException:kinga不能转换为java.lang.Double

这里出了什么问题。有人能告诉我可比队列和优先级队列是如何工作的吗?

共有3个答案

梁丘兴腾
2023-03-14

优先级队列

许高峻
2023-03-14
class kinga implements Comparable<Double>

这没有道理。虽然你的类会将fine与Double进行比较,但Double没有意识到这一点,并且不会将fine与kinga的实例进行比较,这将打破可比较的契约。由于kinga无法与另一个kinga进行比较,因此不能使用优先级队列

应该是这样的

class Kinga implements Comparable<Kinga>

(注意大写,以遵守Java命名约定),这意味着:Kinga实例可以相互比较。

compareTo方法应该是

@Override
public int compareTo(Kinga other) {
    return Double.compare(this.d, other.d);
}

这意味着:如果我的d比另一个王的d大,我就比另一个王大。

申自明
2023-03-14

kinga应该与kinga相比较,而不是双重的,因此:

class kinga implements Comparable<kinga>

这意味着您的比较方法必须更改为:

public int compareTo(kinga o) {
    return Double.compare(o.d, d);
}
 类似资料:
  • 注意:我知道可以用比较器创建优先级队列,然后重复调用Add。

  • 我有一个,名为,其中包含类型的对象。 您可以在所有车辆上调用该方法。 我要做的是排序,这样车辆被赋予更高的优先级,并被放在队列的前面。 我假设我必须在这里使用一个比较器,但不知道怎么做。

  • 假设我实现了一个HashMap,其中字符被分配了一个值的ArrayList。 我已经在HashMap中创建了这些字符的PriorityQueue,但我希望能够根据此优先级删除这些字符: {a,b,c} {a,b}删除c,因为它的ArrayList中包含一个值,该值决定必须首先删除它。 对此最好的方法是什么?

  • 一般来说,如果我理解正确的话,在给定列表和添加每个元素之间的“heapizing;o(n)”运行时是有区别的;o(lg n)。java遵循这种行为吗?如果不是,下面的问题可能无效。 下面的示例似乎创建了一个"min-heap"。 然而,假设我想构建一个“最大堆”,但是构造函数不允许我同时传入集合和比较器。在这种情况下,构建最大堆的唯一方法是创建一个实现可比的包装器类吗? 注意:我知道可以用比较器创

  • 考虑下面的优先级类声明<代码>类优先级队列 我的想法: 我能想到的一件事是,这将强制优先级队列使用对象比较器,并且不会提供实现其自定义比较器的能力,因为类的用户可能希望基于某个不同的比较器构建队列。

  • 优先级队列(Priority Queue) 注:队列是一种特征为FIFO的数据结构,每次从队列中取出的是最早加入队列中的元素。但是,许多应用需要另一种队列,每次从队列中取出的应是具有最高优先权的元素,这种队列就是优先级队列(Priority Queue),也称为优先权队列。 1. 优先级队列的概念 1.1 优先级队列的定义 优先级队列是不同于先进先出队列的另一种队列。每次从队列中取出的是具有最高优