java中整数数组的优先级队列
Posted
技术标签:
【中文标题】java中整数数组的优先级队列【英文标题】:Priority Queue of an array of integers in java 【发布时间】:2020-07-06 12:07:09 【问题描述】:我想通过数组的第二个元素 [[0, 30],[5, 10],[15, 20]] 进行比较。
PriorityQueue<int[]> heap = new PriorityQueue(intervals.length, (a, b) -> a[1] - b[1]);
但我收到如下错误
第 8 行:错误:需要数组,但找到了对象
PriorityQueue
^ 2 个错误
【问题讨论】:
这能回答你的问题吗? What is a raw type and why shouldn't we use it? 简而言之,您不应该在这里使用原始类型。new PriorityQueue<>(intervals.length, (a, b) -> a[1] - b[1])
工作
【参考方案1】:
您应该先将一个转换为 int 数组。
PriorityQueue<int[]> heap = new PriorityQueue(intervals.length, (a, b) -> ((int[])a)[1] - ((int[])b)[1]);
【讨论】:
【参考方案2】:好吧,在您的示例中,您有一个二维数组;但是,在您的代码 sn-p 中,您假设应将一维数组保存在队列中。那么,你的问题是什么?您确定要维护 2D 数组的队列吗?这并不意味着您将拥有一个由对/元组组成的队列,这意味着该队列中的每个元素都将是一个离散的二维数组对象。在这种情况下,可能每个数组都有多个元素..这意味着您很可能应该遍历它们..但是如果您确定要使用此代码实现什么并且它是正确的,那么您可以像这样比较第一个元素:
PriorityQueue<int[][]> heap = new PriorityQueue<int[][]>((a, b) ->
if (a[0][0] > b[0][0])
return 1; //change according to your logic
else if (a[0][0] < b[0][0])
return -1; //change according to your logic
else
return 0; //change according to your logic
);
【讨论】:
【参考方案3】:你可以使用 Integer.compare
PriorityQueue<int[]> heap = new PriorityQueue<>(intervals.length, (a,b) -> Integer.compare(a[1],b[1]));
【讨论】:
【参考方案4】:你可以使用:
PriorityQueue<int[]> pq = new PriorityQueue<>(intervals.length,
Comparator.comparingInt(interval -> interval[1]));
【讨论】:
【参考方案5】:只需在 PriorityQueue 后添加“”即可:
PriorityQueue<int[]> heap = new PriorityQueue<>(intervals.length, (a, b) -> a[1] - b[1]);
【讨论】:
以上是关于java中整数数组的优先级队列的主要内容,如果未能解决你的问题,请参考以下文章
Java数据结构及算法实战系列012:Java队列06——数组实现的优先级阻塞队列PriorityBlockingQueue
Java数据结构及算法实战系列012:Java队列06——数组实现的优先级阻塞队列PriorityBlockingQueue
Java数据结构及算法实战系列012:Java队列06——数组实现的优先级阻塞队列PriorityBlockingQueue