gpt4 book ai didi

java - PriorityQueue 仅迭代一半元素

转载 作者:行者123 更新时间:2023-12-01 22:45:12 28 4
gpt4 key购买 nike

我有使用 PriorityQueue 的程序。 poll() 没有给出队列中的所有值。

class Coffee {
public static void main(String[] args) {
PriorityQueue<Double> pq = new PriorityQueue<Double>();
Random rand = new Random();
for (int i = 0; i < 10; i++) {
pq.offer(rand.nextDouble());
}

System.out.println(pq);
System.out.print("size value " + pq.size());

for (int i = 0; i < pq.size(); i++) {
System.out.println(pq.poll());
}
}
}

输出:

[0.005756373546009885, 0.057563473207216886, 0.3415582636412481, 0.2026760924302
6186, 0.10792479235868724, 0.768845643547834, 0.5107848139799113, 0.758559713387
8311, 0.6437353209123445, 0.5156937257761389]
size value 10
0.005756373546009885
0.057563473207216886
0.10792479235868724
0.20267609243026186
0.3415582636412481

大小为 10,那么为什么我无法使用 poll() 获取所有 10 个值?

最佳答案

for (int i = 0; i < pq.size(); i++) {
System.out.println(pq.poll());
}

在每次循环迭代中,您将通过 pq.poll() 删除一个元素,减少 pq.size() ,并且您还增加 i 。所以在表达式 i < pq.size() 中两个值彼此接近并在中间相遇,因此只循环一半次数。

而是这样做:

while (!pq.isEmpty()) {
System.out.println(pq.poll());
}

关于java - PriorityQueue 仅迭代一半元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25472382/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com