Java - 如何将一对 3 整数插入优先级队列?

标签 java exception priority-queue comparable

我正在尝试将 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)是:

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)

我认为插入下一对时比较存在一些问题,我不知道该怎么办。任何帮助将不胜感激。提前致谢。

最佳答案

PriorityQueue 是一个二元堆,因此项目将在插入/删除时在堆中排序,并且您没有告诉它如何比较元素。您可以使 pair 实现 Comparable 或传递 Comparator

class pair3 implements Comparable<pair3>{
 //
}

或者提供一个比较器

PriorityQueue<pair3> p = new PriorityQueue<pair3>(new Comparator<>{
 ..
});

关于Java - 如何将一对 3 整数插入优先级队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33145596/

相关文章:

java - 如何找到控件失去焦点的原因

visual-studio-2010 - $exception 伪变量在 Visual Studio 调试器中不可用(美元异常)

c++ - : inserting into a priority queue,或追溯排序的速度更快吗?

java - 优先级队列/ArrayList 的 IndexOutOfBoundsException

java - SQL 服务器 "Lock request time out period exceeded".. 再次

java - 将抽象/通用对象传递给方法

java - Ceylon 比 Java 或 Scala 有什么优势

scala - 使用 scala 中的重载构造函数定义自己的异常

c++ - std 构造函数的调用是否需要限定?

java - 按优先级队列排序整数