我在Java整数中有优先级队列:
PriorityQueue<Integer> pq= new PriorityQueue<Integer>();
当我打电话时,pq.poll()
我得到了最小的元素。
问题:如何更改代码以获取最大元素?
这样吧:
PriorityQueue<Integer> queue = new PriorityQueue<>(10, Collections.reverseOrder());
queue.offer(1);
queue.offer(2);
queue.offer(3);
//...
Integer val = null;
while( (val = queue.poll()) != null) {
System.out.println(val);
}
在Collections.reverseOrder()
提供了一个Comparator
将在元素进行排序PriorityQueue
在这种情况下,在该oposite为了自己的自然顺序。
问题内容: Java标准库中的Priority Queue实现似乎是最小的Priority Queue,我感到有些困惑。为了将其变为最大,我创建了一个自定义比较器对象。 我想知道是否有更优雅的解决方案。从本质上讲,我不会使用可用于实现Dijkstras等的通用优先级队列。我什至没有意识到会有反向操作的队列:/ 问题答案: 使用Java的比较器。 Java参考
这里是我的比较器: 那么我的问题又来了:为什么poll()会改变这个队列中剩余对象的顺序?
问题内容: 一旦PriorityQueue中对象的优先级发生更改,Java是否有一种简便的方法来重新评估堆?我在中找不到任何迹象,但是必须有某种方法可以做到这一点,对吗?我当前正在删除对象,然后重新添加它,但这显然比在堆上运行更新要慢。 问题答案: 您可能需要自己实现这样的堆。您需要对项目在堆中的位置有一些处理,并需要有一些方法可以在优先级发生变化时向上或向下推项目。 几年前,我在学校工作中写了这
问题内容: 我有以下代码: 如何更改此代码: 使其可以像JSONP一样工作…这完全不同吗? 问题答案: 实际上,您只需要添加,剩下的就由jQuery完成。
问题内容: 我有一个仓库表,里面有16吨数据。我有一些整数列。对于我们编写的每个查询,我们都必须将它们转换为BIGINT,因为SUM太大而无法容纳在INT中。 现在,我们正在开发一个新的数据集市。因此,我们认为,为什么不将所有这些列都更改为BIGINT呢?对于新的查询集,我们不必担心。 由于数据已经加载,因此我认为我将使用Management Studio并更改数据类型。但是我首先得到一个警告:
问题内容: 我正在尝试使用来使用排序对象。 这很容易实现,但是对象类变量(比较器用来计算优先级)在初始插入后可能会更改。大多数人提出了一种简单的解决方案,即删除对象,更新值并再次将其重新插入,因为这是优先级队列的比较器投入使用的时候。 除了围绕PriorityQueue创建包装器类之外,还有其他更好的方法吗? 问题答案: 你必须删除并重新插入,因为队列的工作原理是在插入新元素时将它们放置在适当的位