【问题标题】:Stack extends Vector堆栈扩展向量
【发布时间】:2012-12-20 15:09:05
【问题描述】:

如果堆栈扩展向量是否意味着堆栈已同步?

Vector Java 文档中的注释

与新的集合实现不同,Vector 是同步的。

【问题讨论】:

    标签: java vector stack


    【解决方案1】:

    是的,它是同步的,但根据Javadocs,您应该更喜欢Deque 而不是Stack

    来自Stack Javadocs

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

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

    【讨论】:

    • 如有疑问 look into the code (*openjdk only ;))
    • 为什么不用LinkedList? ArrayDeque 是 Deque 的实现,而 Vector 是 List 的实现
    【解决方案2】:

    是的,从 Vector 继承的方法在 Stack 中保持同步。自己的 Stack 方法 peek、pop、search 在 Stack 中同步。 Stack.push 和 Stack.empty 方法不同步,但是

    public boolean empty() {
        return size() == 0;
    }
    
    public E push(E item) {
        addElement(item);
        return item;
    }
    

    这两个方法都在调用 Vector 的同步方法,因此 Stack.empty 和 Stack.push 是线程安全的。

    【讨论】:

    • +1。我认为这是正确的。我不认为扩展向量会使堆栈同步。这就是定义方法的方式。
    • 对,可以同步的不是类而是方法
    猜你喜欢
    • 1970-01-01
    • 2019-07-01
    • 2016-11-15
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 2011-06-02
    • 2012-09-12
    相关资源
    最近更新 更多