整数数组类型的优先级队列



PriorityQueue<int[]> maxheap = new PriorityQueue<>(Collections.reverseOrder());

线程中的异常";主";java.lang.ClassCastException:class[I不能强制转换为class java.lang.Comparable([I和java.lang.Ccomparable位于加载程序'bootstrap'的模块java.base中(

我需要实现整数数组的maxheap,其中数组的第0个元素应该用作引用,其中数组长度为2

您只需编写自己的Comparator,即可将其提供给PriorityQueue的构造函数:

PriorityQueue<int[]> maxheap = new PriorityQueue<>((a, b) -> Integer.compare(b[0], a[0]));

ComparatorPriorityQueue提供了一个比较队列中两个元素(在我们的代码中为ab(的函数。我们可以使用Integer.compare()方法来保存两个整数值的比较。此方法只返回一个整数,表示a较大、b较大还是相同。

由于ab是数组,我们希望使用数组的第一个元素进行比较。因此,我们使用a[0]b[0]

为了获得最大堆,您必须将ba进行比较(如上面的代码所示(,从而产生反向排序。对于一个最小堆,您将拥有Integer.compare(a[0], b[0])

编辑:对问题进行了调整,以更好地比较第一条注释中的数组。

最新更新