【问题标题】:add to PriorityQueue<Integer> [duplicate]添加到 PriorityQueue<Integer> [重复]
【发布时间】:2017-05-06 12:01:45
【问题描述】:

为此:

    PriorityQueue<Integer> pq = new PriorityQueue<>();
    pq.add(2);
    System.out.println(pq);
    pq.add(4);
    System.out.println(pq);
    pq.add(1);
    System.out.println(pq);

我得到这个输出:

[2]
[2, 4]
[1, 4, 2]

为什么第三行的输出不是[2,4,1]

【问题讨论】:

    标签: java queue priority-queue


    【解决方案1】:

    没有地方写到PriorityQueuetoString 实现按顺序返回它们。其实问题是:

    • PriorityQueue 没有提供 toString() 实现,因此使用了 AbstractCollection::toString()
    • AbstractCollection::toString() 使用 iterator() 方法打印项目(因此通过调用 next()hasNext()
    • 有关PriorityQueue::iterator 的文档指出:返回此队列中元素的迭代器。迭代器不会以任何特定顺序返回元素。

    所以基本上toString 依赖于iterator(),它不提供元素的有序视图。

    【讨论】:

      猜你喜欢
      • 2020-08-19
      • 2019-03-07
      • 2014-07-19
      • 2014-05-13
      • 1970-01-01
      • 2015-01-07
      • 1970-01-01
      • 1970-01-01
      • 2011-08-07
      相关资源
      最近更新 更多