有没有一种像队列一样的集合,但允许我一次获取多个元素?

14

我正在寻找一种数据结构,它的行为类似于队列(可以是队列实现),但允许我从集合中获取多个元素(例如:队列的前15个元素)。

如果不需要新的依赖项,那就太好了。

有这样的东西吗?

在我的研究中最接近的是带有drainTo()方法的BlockingQueue,但这不是我所需要的。


我会创建自己的方法,调用给定参数次数的poll,并返回一个新的集合(由于NimChimpsky不断编辑,我不知道他是否建议相同的方法,但这基本上是正确的方法)。 - vefthym
你为什么认为需要这个,而不是重复地获取? - chrylis -cautiouslyoptimistic-
1个回答

11

LinkedList 实现了队列、集合和列表。

你可以使用 poll 方法获取头部元素,也可以使用 sublist 方法获取前15个元素的子列表并使用 removeRange 方法将它们移除。

我可能只会使用 poll 方法15次,因为子列表/removeRange 方法无论如何都需要遍历元素,因此性能将类似。


我仍在思考这个问题,或按照你之前建议的多次调用queue.poll()。queue.poll() 的优点在于我不需要处理队列小于批处理大小的情况,也不必手动删除元素。我不确定哪一份代码看起来更好。我目前正在运行一些性能测试。 - JSBach
@JSBach 我想性能差异会很小,看看sublist和removeRange的源代码 - 我认为必须迭代元素。 - NimChimpsky
好的,很棒。实际上,removeRange是受保护的,所以我不能使用它。我必须调用sublist(...).clear()。无论如何,我会迭代15次poll。感谢您的帮助,我会尽快将其标记为答案。 - JSBach
我同意使用LinkedList作为实现的建议。但是,你应该使用接口作为集合类型,以简化代码维护。为了遵守Queue接口,有Deque子接口提供返回第一个元素(并且顺便检索前15个元素)的能力。LinkedList是该接口的一种实现。 - bdulac

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接