标签: java collections stack deprecated obsolete
Java Doc表示最好使用Stack创建Deque,而不是使用典型的Stack<>。不幸的是,它没有强调为什么如此。
Stack
Deque
Stack<>
Deques也可以用作LIFO(后进先出)堆栈。应优先使用此接口,而不是传统的Stack类。当双端队列用作堆栈时,元素将从双端队列的开头推送和弹出。
有人可以指出原因吗?同样,还有其他情况我们应该避免使用内置的Collections对象吗?我是一名转向Java的C ++开发人员,因此任何这些微妙的指针都会有所帮助。
Collections
感谢。
答案 0 :(得分:2)
在初始实现集合之后添加了Java泛型; Stack来自Java 1.0 - 而不是在添加泛型时破坏现有代码,因此决定添加复制功能的类(但提供一致的API)。这就是为什么你应该选择Deque - 它提供了一个与所有其他Java Collection一致的API。
Collection
答案 1 :(得分:0)
Stack扩展Vector,这意味着每个操作都会synchronizes。
Vector
synchronizes
您可能会有一个线程访问数据结构,因此在每个操作上进行同步会浪费CPU时间。你会把所有的时间花在抓住并释放物体上的锁上,而实际上很少添加或移除物品。