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

时间:2014-01-17 10:39:22

标签: java collections

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

Javadoc说

public static <T> Queue<T> asLifoQueue(Deque<T> deque)
  

返回Deque作为后进先出(Lifo)队列的视图。       方法add映射到push,remove映射到pop等。当您想要使用需要的方法时,此视图非常有用   一个队列,但你需要Lifo订购。

     

此方法返回的队列上的每个方法调用   导致在后备双端上只有一个方法调用   一个例外。 addAll方法实现为序列   对支持双端队列的addFirst调用。

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

3 个答案:

答案 0 :(得分:0)

Stack是一个lifo集合,但是(i)它已经过时(javadoc建议使用Deque)和(ii)它没有实现Queue接口。

答案 1 :(得分:0)

  

当您想要使用需要队列但需要Lifo排序的方法时,此视图非常有用。

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

  

Deque接口及其实现提供了一组更完整,更一致的LIFO堆栈操作,应该优先使用这个类。例如:

    Deque<Integer> stack = new ArrayDeque<Integer>();

DequeStack更完整,方法asLifoQueue只是将双端队列转换为类似堆栈的数据结构的实用程序。

答案 2 :(得分:0)

来自Javadoc:

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

Deque接口及其实现提供了一套更完整,更一致的LIFO堆栈操作,应优先使用该类。

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