java.util包中的堆栈类

sat*_*h m 1 java

为什么java.util包中的堆栈类是使用数组实现的?为什么不使用Linked List数据结构?

package java.util;

public class Stack<E> extends Vector<E>
{
    private static final long serialVersionUID = 1224463164541339165L;

    protected Object[] elementData; // in Vector Class

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

    public synchronized void addElement(E paramE)
    {
      modCount += 1;
      ensureCapacityHelper(elementCount + 1);
      elementData[(elementCount++)] = paramE;
    }
Run Code Online (Sandbox Code Playgroud)

Via*_*nin 5

  1. 堆栈在JDK1加入,链表中JDK2加入,实现栈时链表是不存在的,

  2. Stack是非常古老的类,现在最好的做法是使用ArrayDeque代替,

  3. LinkedList几乎所有情况都比ArrayList(按性能)差,请参阅Oracle指南SO中的这个答案