【问题标题】: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?

【问题讨论】:

标签: java arraylist vector stack


【解决方案1】:

我怀疑这只是历史性的。 java.util.Stack 从 Java 1.0 开始就已经存在,而 ArrayList 直到 1.2 才引入。 Vector 是他们当时实现它的全部。

为什么不在 1.2 中改变它呢?好吧,Sun 和 Oracle 一直小心翼翼地让 Java 随着时间的推移向后兼容,从线程安全转变为非线程安全将是一个重大变化。

【讨论】:

    【解决方案2】:

    StackVector 出现在 JDK 1.0 中。 ArrayList 直到 JDK 1.2 才添加。 StackVector 的继承已被烘焙到 API 中,因此现在无法更改。

    但无论如何,这是一个过时的课程。修复它不是优先事项。 Stack 自己的 Javadoc 文章说:

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

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

    【讨论】:

      猜你喜欢
      • 2020-02-10
      • 2020-04-24
      • 2011-08-03
      • 2018-07-05
      • 2020-12-04
      • 2018-08-05
      • 1970-01-01
      • 1970-01-01
      • 2015-09-06
      相关资源
      最近更新 更多