【问题标题】:Practical usecase of class Stack's push method returning its argument类堆栈推送方法返回其参数的实际用例
【发布时间】:2017-10-06 06:31:20
【问题描述】:

1) class Stack: public E push(E item)

class Stack - 它的 push 方法只返回它的参数(不像新的 Deque,其各自的 push 方法现在是 void):

public E push(E item)

您能否提供使用此功能的任何有用的现实生活/生产示例?

我知道 Stack 是遗留的,请改用 Deque 实现。

但是在旧版应用程序中如何使用此功能?我想它可以用于调用链,但想不出一个实际的例子。

2) 您在日常工作中是否经常需要使用 Stack 类? 它是否仍然广泛使用?或者大多数遗留应用程序已经被重构为使用 Deque?

3) 如果我在积极开发(添加新功能)的任何遗留应用程序中遇到 Stack,将 Stack 重构为 Deque 是否有任何实际好处(是否值得)?我知道在新应用中 Deque 是可取的,但如果我已经在旧应用中拥有 Stack,从实际的角度来看,是否存在绝对值得努力将其重构为 Deque 的情况?

4) 我是对的,如果我需要在多线程访问中使用堆栈数据结构,我将使用 ConcurrentLinkedDeque(因为我更喜欢 Deque 实现而不是 Stack 类)?或者现在有没有使用 Stack 进行多线程访问的做法?我想没有,但我还是想请教大师。

【问题讨论】:

    标签: java collections stack legacy-code


    【解决方案1】:

    1) 是的。考虑这个类:

    class Foo
    {
        public void activate() { }
    }
    

    有时写起来更简洁:

    Stack<Foo> s = new Stack<>();
    s.push(new Foo()).activate();
    

    而不是:

    Stack<Foo> s = new Stack<>();
    Foo f = new Foo();
    f.activate();
    s.push(f);
    

    2) 不,至少在过去 5 年里,我从未使用过或见过使用过它。我发现 Stack 的声誉高于它。大多数人都知道要避免它,即使他们不清楚原因。

    3) 这是这个问题的重复:Why should I use Deque over Stack?


    关于你删除的问题,与search方法有关:

    您的假设不正确。 Stack 扩展了 Vector,因此继承了 Vector 的所有公共方法,其中之一是 elementAt(int)。因此,您可以根据需要使用此索引。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-16
      • 1970-01-01
      • 2013-05-11
      • 2013-11-16
      • 1970-01-01
      • 2021-06-01
      • 1970-01-01
      相关资源
      最近更新 更多