0

我正在寻找一种 Java 7 数据结构,它的行为类似于 ajava.util.Queue并且还具有“最终项目已被删除”的概念。

例如,应该可以表达如下概念:

while(!endingQueue.isFinished()) {
    Element e = endingQueue.remove()
    doSomethingWith(e);
}
4

1 回答 1

2

使用接口java.util.Queue,怎么样

while(queue.peek() != null) {
    Element e = queue.remove();
    doSomethingWith(e);
}

编辑回答阿卜杜勒的评论:

根据约定,空项可能是 java.util.Queue 的有效条目

您将不得不指出 javadoc 中说明这一点的特定句子,因为我没有看到它。

我看到的是 peek 方法的描述。

检索但不删除此队列的头部,如果此队列为空,则返回 null。

现在,队列中的元素可以为空。但它仍然是一个元素,将由 peek 和 remove 方法返回。

另外,考虑一个并发访问的队列。仅检查 null 可能不足以确定生产者是否已将元素放入队列。

队列是一个接口。您必须使用具体的实现来测试它,例如ConcurrentLinkedQueue。如果没有一个具体实现可以满足您的需求,您可以自己实现 Queue。

Queue 接口提供了一种查看队列中是否有元素的方法。

ConcurentLinkedQueue 类提供了一个额外的方法来查看队列中是否有一个元素,isEmpty。

测试并查看您是否遇到实际的性能问题,而不是担心可能发生或可能不会发生的性能问题。

于 2013-02-20T15:02:34.640 回答