Tag: 优先级队列

简单的Java PriorityQueue 错误

我正在做的是将三个字符串添加到Java PriorityQueue然后将它们打印出来这是我的代码: import java.util.*; import java.lang.*; class Main { public static void main (String[] args) throws java.lang.Exception { PriorityQueue pq=new PriorityQueue(); pq.add(“abc”); pq.add(“ability”); pq.add(“aberdeen”); String s=”ability”; System.out.println(s.compareTo(“aberdeen”)); System.out.println(pq); } } 这是输出: 4 [abc, ability, aberdeen] 这不应该是abc, aberdeen, ability而是abc, aberdeen, ability 。 既然这是正确的字母顺序?

Java优先级队列应该如何工作?

简短的故事,我正在实现一个图表,现​​在我正在研究Kruskal,我需要一个优先级队列。 我对优先级队列的定义是具有最小密钥的元素将首先出现? 这是错的吗? 因为当我在队列中插入加权边(或数字)时,它们不会最终排序。 PriorityQueue tja = new PriorityQueue(); tja.add(55); tja.add(99); tja.add(1); tja.add(102); tja.add(54); tja.add(51); System.out.println(tja); 那将打印出来; [1,54,51,102,99,55]。 这不像我希望的那样排序! 是的,我创建了一个进入优先级队列的comperator,该队列从edge对象中提取数字并根据该int进行比较。 所以这应该有用,或者我只是完全误解了这个数据结构如何工作的整个概念?

有界PriorityBlockingQueue

PriorityBlockingQueue是无限的,但我需要以某种方式绑定它。 实现这一目标的最佳方法是什么? 有关信息,有界PriorityBlockingQueue将用于ThreadPoolExecutor 。 注意:通过有界我不想抛出exception,如果发生这种情况,我想将对象放入队列中,然后根据其优先级值进行剪切。 有什么好方法可以做这件事吗?

什么时候应该在PriorityQueue上使用TreeMap,反之亦然?

似乎他们都让你检索最小值,这是我对Prim算法所需要的,并强制我删除并重新插入一个键来更新它的值。 使用一个优于另一个是否有任何优势,不仅仅是这个例子,但一般来说?

如何迭代PriorityQueue?

for (Event e : pq) 不按优先级顺序迭代。 while(!pq.isEmpty()){ Event e = pq.poll(); } 这可以工作,但清空队列。

Java:PriorityQueue从自定义比较器返回错误的排序?

我编写了一个自定义比较器来比较我的节点类,但是java优先级队列没有以正确的顺序返回我的项目。 这是我的比较器: public int compare(Node n1, Node n2){ if (n1.getF() > n2.getF()){ return +1; } else if (n1.getF() < n2.getF()){ return -1; } else { // equal return 0; } } 其中getF返回一个double。 但是,在将多个节点插入优先级队列后,我将其打印出来: while(open.size() > 0) { Node t = (Node)(open.remove()); System.out.println(t.getF()); } 结果如下: 6.830951894845301 6.830951894845301 6.0 6.0 5.242640687119285 7.4031242374328485 7.4031242374328485 8.071067811865476 任何想法为什么会这样? 我的比较器错了吗? 谢谢。 […]

优先级队列消除了复杂性时间

Java中Priority Queue类的remove()函数的复杂性(大哦)是多少? 我无法在任何地方找到任何记录,我认为它是O(n),考虑到你必须在删除它之前找到该元素然后重新洗牌。 但我看到其他人不同意并认为它是O(logn)。 有任何想法吗?

排序PriorityQueue

我遇到了PriorityQueues的问题,因为我认为它优先命令,但我不确定优先级是什么(我的意思是价值是什么以及它来自哪里)。 可以使用构造函数中的比较器创建priorityQueue,我已经尝试过但它不起作用。 队列类: public JavaPriorityFlightQueue() { super(); flights = new PriorityQueue(5, new SortQueueViaPriority()); } 比较: import java.util.Comparator; public class SortQueueViaPriority implements Comparator { public int compare(Object o1, Object o2){ Flight f1 = (Flight) o1; Flight f2 = (Flight) o2; if( f1 == null || f2 == null ){ if( f1 == f2 ) return 0; […]

在ThreadPoolExecutor中测试PriorityBlockingQueue

我在这个例子中实现了我的ThreadPoolExecutor和PriorityBlockingQueue: https : //stackoverflow.com/a/12722648/2206775 并写了一个测试: PriorityExecutor executorService = (PriorityExecutor) PriorityExecutor.newFixedThreadPool(16); executorService.submit(new Runnable() { @Override public void run() { try { Thread.sleep(1000); Thread.sleep(1000); System.out.println(“1”); } catch (InterruptedException e) { e.printStackTrace(); } } }, 1); executorService.submit(new Runnable() { @Override public void run() { try { Thread.sleep(1000); Thread.sleep(1000); System.out.println(“3”); } catch (InterruptedException e) { e.printStackTrace(); } } }, […]

Java – PriorityQueue与已排序的LinkedList

哪个实现不那么“重”:PriorityQueue或排序的LinkedList(使用Comparator)? 我希望将所有项目排序。 插入将是非常频繁和偶尔我将必须运行所有列表来进行一些操作。