为啥 java.util.Stack 是使用 Vector 而不是 Arraylist 实现的
Posted
技术标签:
【中文标题】为啥 java.util.Stack 是使用 Vector 而不是 Arraylist 实现的【英文标题】:Why java.util.Stack is implemented using Vector and Not an Arraylist为什么 java.util.Stack 是使用 Vector 而不是 Arraylist 实现的 【发布时间】:2017-01-26 08:35:55 【问题描述】:Java 使用 Vector 实现 Stack 类,为什么?虽然看起来 Arraylist 应该是一个更好的选择。 Java 希望 Stack 是线程安全的,还是要求 Stack 通常(我认为不是这种情况)必须是线程安全的,或者还有其他理论可以使用 Vector 在 Java 中实现 Stack?
【问题讨论】:
What are the differences between ArrayList and Vector?的可能重复 因为Java JDK 1.0 中同时引入了Stack 和Vector,而在JDK1.2 中又引入了ArrayList 很长时间 【参考方案1】:我怀疑这只是历史性的。 java.util.Stack 从 Java 1.0 开始就已经存在,而 ArrayList 直到 1.2 才引入。 Vector 是他们当时实现它的全部。
为什么不在 1.2 中改变它呢?好吧,Sun 和 Oracle 一直小心翼翼地让 Java 随着时间的推移向后兼容,从线程安全转变为非线程安全将是一个重大变化。
【讨论】:
【参考方案2】:Stack
和 Vector
出现在 JDK 1.0 中。 ArrayList
直到 JDK 1.2 才添加。 Stack
对Vector
的继承已被烘焙到 API 中,因此现在无法更改。
但无论如何,这是一个过时的课程。修复它不是优先事项。 Stack
自己的 Javadoc 文章说:
Deque
接口及其实现提供了一组更完整和一致的 LIFO 堆栈操作,应优先使用此类。例如:Deque<Integer> stack = new ArrayDeque<Integer>();
【讨论】:
以上是关于为啥 java.util.Stack 是使用 Vector 而不是 Arraylist 实现的的主要内容,如果未能解决你的问题,请参考以下文章