gpt4 book ai didi

java - 为什么 Java 中的 PriorityQueue 不能有 initialCapacity 0?

转载 作者:搜寻专家 更新时间:2023-10-31 08:16:04 25 4
gpt4 key购买 nike

我使用 PriorityQueue 对某些数据进行部分排序。特别是,这是代码:

Collection<Data> data = ...;
PriorityQueue<Data> queue = new PriorityQueue<Data>(data.size(), dataComparator);
queue.addAll(data);
// iterate over queue with remove() until we have as much data as we need or until queue is empty

不幸的是,当 data 集合为空时,代码失败,因为 PriorityQueue 不能作为 initialCapacity 传递零。这个设计决定背后的原因是什么?为什么不能有一个 0 大小的 PriorityQueue

UPD:我知道如何解决这个问题。我想知道为什么 PriorityQueue 不在其中包含此 max(1, n) 代码 - 有任何原因还是只是糟糕的 API 设计?

最佳答案

为什么要使用队列?队列是一种数据结构,适用于您有一个将项目排入队列的“生产者”和一个使它们出队的“消费者”的情况。优先队列使用树结构对排队的项目进行排序。生产者需要一个缓冲区才能入队,因此 initialCapacity = 0 没有意义。

在您的情况下从不排队任何东西,您只是处理您已有的集合中的数据。为什么要为它创建一个新的数据结构?你可以只使用

for (Data item : Collections.sort(data, dataComparator)) {
// ...
}

或者,根据 Daniel 的评论,使用 Selection Algorithm这样您就可以从实际上只需要一部分商品的情况中获益。

关于java - 为什么 Java 中的 PriorityQueue 不能有 initialCapacity 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3609342/

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