我有一个PriorityQueue
,名为Inington
,其中包含车辆
类型的对象。
您可以在所有车辆上调用该方法。
我要做的是排序传入
,这样燃料最少的
车辆被赋予更高的优先级,并被放在队列的前面。
我假设我必须在这里使用一个比较器,但不知道怎么做。
PriorityQueue类有一个构造函数,该构造函数将比较器作为参数。您可以通过提供特定的比较器来构造优先级队列
PriorityQueue<Vehicle> queue = new PriorityQueue<Vehicle>(initialCapacity, new Comparator<Vehicle> {
int compare(Vehicle a, Vehicle b) {
return a.getFuelLevel() - b.getFuelLevel();
}
});
在我自己的类中使用PriorityQueue
时,我总是做的一件事是使该类实现可比
在您的情况下,如果车辆的燃油量小于输入的车辆,则返回1;如果两者相同,则返回0;如果车辆的燃油量大于输入的燃油量,则返回-1。
http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html
注意:我知道可以用比较器创建优先级队列,然后重复调用Add。
我正在编写一个最小优先级队列和一个最大优先级队列,如下所示: 输入数组的数字将一个接一个地添加到队列中。然而,当数组[12,4,5,3,8,7]是一个样本输入,打印优先队列的输出是: MIN:[3.0, 4.0, 5.0, 12.0, 8.0, 7.0]MAX:[12.0, 8.0, 7.0, 3.0, 4.0, 5.0] 我定义的比较器有什么问题吗?提前感谢你的帮助。
假设我实现了一个HashMap,其中字符被分配了一个值的ArrayList。 我已经在HashMap中创建了这些字符的PriorityQueue,但我希望能够根据此优先级删除这些字符: {a,b,c} {a,b}删除c,因为它的ArrayList中包含一个值,该值决定必须首先删除它。 对此最好的方法是什么?
一般来说,如果我理解正确的话,在给定列表和添加每个元素之间的“heapizing;o(n)”运行时是有区别的;o(lg n)。java遵循这种行为吗?如果不是,下面的问题可能无效。 下面的示例似乎创建了一个"min-heap"。 然而,假设我想构建一个“最大堆”,但是构造函数不允许我同时传入集合和比较器。在这种情况下,构建最大堆的唯一方法是创建一个实现可比的包装器类吗? 注意:我知道可以用比较器创
优先级队列未维护排序顺序我是否未正确执行?输出时出现错误的排序顺序? 产出:[1, 5, 8, 19, 9]
考虑下面的优先级类声明<代码>类优先级队列 我的想法: 我能想到的一件事是,这将强制优先级队列使用对象比较器,并且不会提供实现其自定义比较器的能力,因为类的用户可能希望基于某个不同的比较器构建队列。