这是堆栈还是堆栈仿真?

时间:2017-12-09 18:41:40

标签: java stack

package java.util;
public
class Stack<E> extends Vector<E> {
    public Stack() {
    }

    public E push(E item) {
        addElement(item);
        return item;
    }

    public synchronized E pop() {
        E obj;
        int len = size();

        obj = peek();
        removeElementAt(len - 1);

        return obj;
    }

    public synchronized E peek() {
        int     len = size();

        if (len == 0)
            throw new EmptyStackException();
        return elementAt(len - 1);
    }

    public synchronized int search(Object o) {
        int i = lastIndexOf(o);

        if (i >= 0) {
            return size() - i;
        }
        return -1;
    }


    private static final long serialVersionUID = 1224463164541339165L;
}

以上是堆栈的java源代码。 我意识到它只是模拟一个堆栈,而不是一个真正的堆栈。所以我的问题是

  1. 我是否正确地说这只是模仿Stack而不是真实的?
  2. 如果我可以说上面的内容并且我想从头开始构建它,我该怎么做?(固定大小或arraylist的数组反过来使用列表(单/双链接)?)

1 个答案:

答案 0 :(得分:2)

  1. 没有&#34;真正的Stack&#34;,堆栈只是一个想法,即所谓的abstract data type。它支持两个操作,push和pop,并且元素的顺序被定义为后进先出(LIFO)。除了java.util.Stack(基于Vector,基于数组),你还有java.util.LinkedList(一个双向链表),它也支持堆栈操作,所以它也是一个堆栈和另一个一样多。还有其他一些实现,例如java.util.Deque的所有实现。

  2. 您可以通过多种方式从头开始,每种方式都有自己的权衡。你的问题没有得到足够的定义,无法得到好的答案。