gpt4 book ai didi

java - PriorityQueue 的顺序不符合预期

转载 作者:行者123 更新时间:2023-12-02 12:20:19 27 4
gpt4 key购买 nike

我有这个测试:

@Test
public void testPrioQueue() {
PriorityQueue<Map.Entry<String, Integer>> pq = new PriorityQueue<>((a, b) -> b.getValue() - a.getValue());
pq.add(new SimpleEntry<>("one", 1));
pq.add(new SimpleEntry<>("three", 3));
pq.add(new SimpleEntry<>("two", 2));
List<String> keys = pq.stream().map(e -> e.getKey()).collect(Collectors.toList());
assertEquals(Arrays.asList("three", "two", "one"), keys);
}

我希望 PriorityQueue 根据我的比较器进行排序:首先按最高值排序。相反,我得到了这个结果:

java.lang.AssertionError: expected:<[three, two, one]> but was:<[three, one, two]>

我的期望是错误的吗?

最佳答案

让我们看一下PriorityQueue docs :

The Iterator provided in method iterator() is not guaranteed to traverse the elements of the priority queue in any particular order.

同样适用于Stream实例。

如果您想创建一个按优先级顺序遍历队列的 Stream 实例,您可以执行以下操作:

Stream.generate(queue::poll).limit(queue.size())

请记住,轮询将从原始队列中删除元素。

关于java - PriorityQueue 的顺序不符合预期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45831443/

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