为什么要使用Deque而不是内置Stack<>?

时间:2018-05-16 00:09:27

标签: java collections stack deprecated obsolete

Java Doc表示最好使用Stack创建Deque,而不是使用典型的Stack<>。不幸的是,它没有强调为什么如此

  

Deques也可以用作LIFO(后进先出)堆栈。应优先使用此接口,而不是传统的Stack类。当双端队列用作堆栈时,元素将从双端队列的开头推送和弹出。

有人可以指出原因吗?同样,还有其他情况我们应该避免使用内置的Collections对象吗?我是一名转向Java的C ++开发人员,因此任何这些微妙的指针都会有所帮助。

感谢。

2 个答案:

答案 0 :(得分:2)

在初始实现集合之后添加了Java泛型; Stack来自Java 1.0 - 而不是在添加泛型时破坏现有代码,因此决定添加复制功能的类(但提供一致的API)。这就是为什么你应该选择Deque - 它提供了一个与所有其他Java Collection一致的API。

答案 1 :(得分:0)

Stack扩展Vector,这意味着每个操作都会synchronizes

您可能会有一个线程访问数据结构,因此在每个操作上进行同步会浪费CPU时间。你会把所有的时间花在抓住并释放物体上的锁上,而实际上很少添加或移除物品。

相关问题