作为java 6的一部分,在Collections实用程序类中添加了asLifoQueue(Deque)静态方法。
Javadoc说
public static <T> Queue<T> asLifoQueue(Deque<T> deque)
返回Deque作为后进先出(Lifo)队列的视图。 方法add映射到push,remove映射到pop等。当您想要使用需要的方法时,此视图非常有用 一个队列,但你需要Lifo订购。
此方法返回的队列上的每个方法调用 导致在后备双端上只有一个方法调用 一个例外。 addAll方法实现为序列 对支持双端队列的addFirst调用。
现在这和堆栈有什么区别。这本质上不是一个堆栈吗?
答案 0 :(得分:0)
Stack是一个lifo集合,但是(i)它已经过时(javadoc建议使用Deque)和(ii)它没有实现Queue接口。
答案 1 :(得分:0)
当您想要使用需要队列但需要Lifo排序的方法时,此视图非常有用。
该方法只包装deque参数,因此您可以处理Queue
实现。如你所说,队列只是一个堆栈,但Stack
类的javadoc说:
Deque接口及其实现提供了一组更完整,更一致的LIFO堆栈操作,应该优先使用这个类。例如:
Deque<Integer> stack = new ArrayDeque<Integer>();
Deque
比Stack
更完整,方法asLifoQueue
只是将双端队列转换为类似堆栈的数据结构的实用程序。
答案 2 :(得分:0)
来自Javadoc:
首次创建堆栈时,它不包含任何项目。
Deque接口及其实现提供了一套更完整,更一致的LIFO堆栈操作,应优先使用该类。
所以这是相同的行为,但Deque有更多方法可以使用