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

P.K*_*.K. 3 java collections stack deprecated obsolete

Java文档说,Stack最好从 a 创建 a Deque,而不是使用 quintessential Stack<>。不幸的是,它没有强调为什么会这样

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

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

谢谢。

Edw*_*uck 6

Stack扩展Vector意味着它synchronizes适用于每个单独的操作。

很可能只有一个线程访问数据结构,因此同步每个操作会浪费 CPU 时间。您将花费所有时间来获取和释放对象上的锁,而很少花在实际添加或删除项目上。