从Collections.asLifoQueue(Deque)和堆栈(Java6)返回的队列之间的差异

从Collections.asLifoQueue(Deque)和堆栈(Java6)返回的队列之间的差异,java,collections,Java,Collections,作为Java6的一部分,在Collections实用程序类中添加了一个asLifoQueue(Deque)静态方法 Javadoc说 public static <T> Queue<T> asLifoQueue(Deque<T> deque) 公共静态队列asLifoQueue(Deque-Deque) 返回作为后进先出(Lifo)队列的Deque视图。 方法add映射到push,remove映射到pop等等。当您希望使用需要的方法时,此视图非常有用 队列

作为Java6的一部分,在Collections实用程序类中添加了一个asLifoQueue(Deque)静态方法

Javadoc说

public static <T> Queue<T> asLifoQueue(Deque<T> deque)
公共静态队列asLifoQueue(Deque-Deque)
返回作为后进先出(Lifo)队列的Deque视图。 方法add映射到push,remove映射到pop等等。当您希望使用需要的方法时,此视图非常有用 队列,但您需要后进先出排序

此方法返回的队列上的每个方法调用 结果在支持deque上只调用了一个方法,其中 一个例外。addAll方法实现为一系列 在后台数据块上添加第一次调用


现在,这和堆栈有什么区别。这本质上不是一个堆栈吗?

堆栈是后进先出集合,但(i)它已经过时(javadoc建议使用Deque)并且(ii)它没有实现队列接口

当您希望使用需要队列但需要后进先出排序的方法时,此视图非常有用

该方法仅包装deque参数,因此您可以处理
队列
实现。正如您所说,队列只是一个堆栈,但是
堆栈
类的

Deque接口及其实现提供了一组更完整、更一致的后进先出堆栈操作,应该优先于此类使用。例如:

    Deque<Integer> stack = new ArrayDeque<Integer>();
Deque stack=new ArrayDeque();
Deque
Stack
更完整,方法
asLifoQueue
只是将Deque转换为类似堆栈的数据结构的实用工具。

来自Javadoc:

首次创建堆栈时,它不包含任何项

Deque接口及其实现提供了一组更完整、更一致的后进先出堆栈操作,应该优先于此类使用

所以这是相同的行为,但Deque有更多的方法可以使用