2017-05-08 66 views
0

1)Stack类的实用用例:公共E推(E项)Stack类的push方法返回其参数

Stack类 - 它的push方法只是返回它的参数(不同于新的双端队列时,其相应的推法现在是无效的):

public E push(E item) 

你能否提供任何有用的使用此功能的真实/生产示例?

我知道Stack是遗留的,而是使用Deque实现。

但是遗留应用程序中如何使用此功能?我想它可以用于通话链接,但不能想到一个实际的例子。

2)您是否经常需要在日常工作中使用Stack类?它广泛使用吗?或者大多数旧版应用已经被重构为使用Deque?

3)是否有任何实际有用的(并且是值得的)重构协议栈的Deque,如果我在任何遗留应用程序,它,我积极发展(增加新功能)遇到堆栈?我明白,在新的应用程序Deque是可取的,但如果我已经有遗留应用程序中的堆栈,从实际的角度来看,是绝对值得花费重构它到Deque的情况?

4)我说得对,如果我需要使用堆栈数据结构在多线程访问,我将使用ConcurrentLinkedDeque(因为我在Stack类喜欢的Deque实现)?或者是否有任何使用Stack进行多线程访问的做法?我想不,但我仍然想问大师。

回答

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)。所以你可以使用这个索引,如果你想。