首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java :优先级队列

Java :优先级队列
EN

Stack Overflow用户
提问于 2011-10-28 17:06:41
回答 3查看 1.8K关注 0票数 7

我有一个java程序,它是这样的。

公共类PriorityQueueExample {

代码语言:javascript
运行
复制
public static void main(String[] args) {
    PriorityQueue<Integer> pq = new PriorityQueue<Integer>();
    pq.add(10);
    pq.add(1);
    pq.add(9);
    pq.add(2);
    pq.add(8);
    pq.add(3);
    pq.add(7);
    pq.add(4);
    pq.add(6);
    pq.add(5);
System.out.println(pq);

}

}

我的问题是,为什么优先级队列不对它们进行排序。根据java规范,它实现了可比较的,并保持了排序顺序(自然排序)。

我的程序输出如下: 1,2,3,4,5,9,7,10,6,8

EN

回答 3

Stack Overflow用户

发布于 2011-10-28 17:09:56

插入到优先级队列中不足以对元素列表进行排序,因为它不按排序顺序存储元素;它以部分排序的堆顺序存储元素。您必须删除循环中的元素才能对它们进行排序:

代码语言:javascript
运行
复制
while (pq.size() > 0)
    System.out.println(pq.remove());
票数 7
EN

Stack Overflow用户

发布于 2011-10-28 17:11:04

它是经过排序的,但在内部,元素存储在中。如果调用peek()poll()remove(),就会得到正确的顺序(这就是访问队列的方式)。

票数 7
EN

Stack Overflow用户

发布于 2019-11-28 00:47:22

poll()和remove()将按照java8给出排序顺序,而不是peek()。

代码语言:javascript
运行
复制
 PriorityQueue<Integer> pq = new PriorityQueue<Integer>();
    pq.add(10);
    pq.add(1);
    pq.add(9);
    pq.add(2);
    pq.add(8);
    pq.add(3);
    pq.add(7);
    pq.add(4);
    pq.add(6);
    pq.add(5);
        // Remove items from the Priority Queue (DEQUEUE)
        while (!pq.isEmpty()) {
          //  System.out.println(pq.remove());
          System.out.println(pq.poll());
        }
Output for poll() & remove():
1 
2
3 
4 
5 
6 
7 
8 
9 
10
output for peek():
1
1
1
1
1
1
1
1
1
1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7927213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档