在Java中使用堆栈作为队列

在Java中使用堆栈作为队列,java,stack,queue,Java,Stack,Queue,我需要以不同的顺序处理一棵树,比如BFS和DFS。通过使用队列或堆栈,这两种方法都很容易,但是,我缺少Java中允许执行以下操作的适当接口 QueueOrStack<N> pending = ... while (!pending.isEmpty()) { N node = pending.poll(); // <----- this is the problem pending.addAll(node.children()); process(node

我需要以不同的顺序处理一棵树,比如BFS和DFS。通过使用队列或堆栈,这两种方法都很容易,但是,我缺少Java中允许执行以下操作的适当接口

QueueOrStack<N> pending = ...
while (!pending.isEmpty()) {
    N node = pending.poll(); // <----- this is the problem
    pending.addAll(node.children());
    process(node);
}
QueueOrStack挂起=。。。
而(!pending.isEmpty()){

N node=pending.poll();//有这样一个结构


它被称为
ArrayDeque
->

+1-我从未使用过该类,但我浏览了一下文档,它看起来与本例所需的完全相同。还值得指出的是,该文档声明“当用作堆栈时,该类可能比堆栈快,当用作队列时,它比LinkedList快。”这很好!实际上,结构是,而
ArrayDeque
是一个实现。@Alexander Pogrebnyak:我看到它有所有需要的操作,但我仍然需要执行类似
N node=asStack?pending.pollLast():pending.pollFirst()的操作
。但这还不错。@maaartinus:用ArrayDeque作为字段和布尔值asStack创建您自己的类。然后公开所需的方法(即
public e poll(){asStack?pending.pollLast():pending.pollFirst()}
)。如果愿意,您可以让它实现堆栈和队列接口。@maaartinus LinkedList还实现Deque,至少它比基于数组的接口性能更好。