相关疑难解决方法(0)

如何迭代PriorityQueue?

for (Event e : pq)
Run Code Online (Sandbox Code Playgroud)

不按优先级顺序迭代.

while(!pq.isEmpty()){
  Event e = pq.poll();
}
Run Code Online (Sandbox Code Playgroud)

这可以工作但排空队列.

java collections loops priority-queue

30
推荐指数
4
解决办法
5万
查看次数

java的PriorityQueue的内置迭代器不以任何特定顺序遍历数据结构.为什么?

这直接来自Java Docs:

该类及其迭代器实现了Collection和Iterator接口的所有可选方法.方法iterator()中提供的迭代器不保证以任何特定顺序遍历优先级队列的元素.如果需要有序遍历,请考虑使用Arrays.sort(pq.toArray()).

基本上,我的PriorityQueue工作正常,但是使用自己内置的toString()方法将其打印到屏幕上会让我看到这个异常现象,并且想知道是否有人可以解释为什么它是迭代器提供的(并且使用过)内部)不按自然顺序遍历PriorityQueue?

java priority-queue

11
推荐指数
1
解决办法
5047
查看次数

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

简短的故事,我正在实现一个图表,现​​在我正在研究Kruskal,我需要一个优先级队列.我对优先级队列的定义是具有最小密钥的元素将首先出现?这是错的吗?因为当我在队列中插入加权边(或数字)时,它们不会最终排序.

PriorityQueue<Integer> tja = new PriorityQueue<Integer>(); 
tja.add(55);
tja.add(99); 
tja.add(1); 
tja.add(102);
tja.add(54);
tja.add(51);
System.out.println(tja);
Run Code Online (Sandbox Code Playgroud)

那将打印出来; [1,54,51,102,99,55].这不像我希望的那样排序!是的,我创建了一个进入优先级队列的comperator,该队列从edge对象中提取数字并根据该int进行比较.所以这应该有用,或者我只是完全误解了这个数据结构如何工作的整个概念?

java priority-queue data-structures

5
推荐指数
2
解决办法
9047
查看次数

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

其中getF返回一个double.但是,在将多个节点插入优先级队列后,我将其打印出来:

while(open.size() > 0) {
    Node t = (Node)(open.remove());
    System.out.println(t.getF());
}
Run Code Online (Sandbox Code Playgroud)

结果如下:

6.830951894845301
6.830951894845301
6.0
6.0
5.242640687119285
7.4031242374328485
7.4031242374328485
8.071067811865476
Run Code Online (Sandbox Code Playgroud)

任何想法为什么会这样?我的比较器错了吗?谢谢.

麦克风

java priority-queue comparator

5
推荐指数
1
解决办法
9894
查看次数