public class Pair implements Comparable<Pair>{
public String name;
public int number;
public int compareTo(Pair other) {
if (other == null) {
return 1;
}
return Integer.compare(number, other.number);
}
}
ht = new Hashtable<String, Pair>(perLen);
PriorityQueue<Pair> pq = new PriorityQueue<Pair>(k);
set = ht.keySet();
for (String i: set) {
tmp0 = ht.get(i);
if (tmp0.compareTo(pq.peek()) > 0) {
if (pq.size() == k) {
pq.remove();
}
pq.add(tmp0);
}
}
System.out.println(pq.toString());
输出:
[OSCAR 822, ALBERTO 827, DAVID 1523, JAVIER 943]
我在哈希表中寻找k个最大的对(它们的数目),而输出中的那些实际上是正确的。我的问题是,为什么最后两个交换了?
您可以使用轮询方法检查订单,如下所示:
打印优先级队列的内容[java]
PriorityQueue类的toString()方法不能保证元素的顺序,因为它使用迭代器。
PriorityQueue
仅返回其头部的最低元素。它不会对所有元素进行排序,因此如果使用pq遍历队列。toString()
,元素可能没有按顺序显示。这是因为在内部,PriorityQueue。toString()
使用优先级队列。迭代器()
方法,根据文档:
方法Iterator()
中提供的迭代器不保证以任何特定顺序遍历优先级队列的元素。如果需要有序遍历,请考虑使用<代码>数组。排序(pq.toArray())。
如果要按顺序打印优先级队列的元素,应更改以下代码:
System.out.println(pq.toString());
对下列事项:
while (!pq.isEmpty())
System.out.println(pq.remove());
假设列表“A”是1- 请回顾一下这个,帮我即兴创作
问题内容: 哪个实现不太“繁重”:PriorityQueue或排序的LinkedList(使用Comparator)? 我想对所有项目进行排序。插入将非常频繁,有时我将必须运行所有列表以进行一些操作。 问题答案: A 是最糟糕的选择。要么使用(或更一般地说,是一个实现者),要么。如果确实使用列表,则仅在遍历列表内容之前对其进行排序,而不是在每次插入之后对其进行排序。 有一点要注意的是,迭代器 不
可能重复: Java两个字段排序问题 我有用户对象,比如 我有一个,其中包含这些对象,我必须按名字对其进行排序,如果名字匹配,则只按姓氏排序。
我实现了最大的三重乘积算法,但我使用了排序,这使得我的时间复杂度为O(nlogn)。有没有办法在没有临时排序数组的情况下实现它? 问题:给定一个由n个整数组成的列表arr[0...(n-1)]。您必须计算一个列表输出[0...(n-1)],以便对于每个索引i(在0和n-1之间,包括在内),输出[i]等于arr[0... i]中三个最大元素的乘积(如果i 示例: 我的解决方案: 谢啦
我关注的是从包含数千个元素的Java PriorityQueue创建排序数组的不同风格。Java8文档说 如果需要有序遍历,请考虑使用数组。排序(pq.toArray())。 然而,我确实喜欢流式API,所以我最初的想法是 (其中,是PriorityQueue的自定义比较器,我确实想要它的相反顺序。)与下列习惯用法相比,使用这个习惯用法有什么缺点吗 后面的代码显然更直接地遵循了API文档的建议,但
我在[17,98,89,42,67,54,89,25,38]中有一个数字列表,从左到右插入到一个空堆中。生成的堆是什么?