2 huanglong0438 huanglong0438 于 2016.04.27 12:47 提问

为什么java.util里的Stack不用LinkedList实现

thinking in java用LinkedList实现了stack,而且说比java.util 里自带的stack更好,那么为什么java.util里的stack不用LinkedList实现呢?

2个回答

w172087242
w172087242   Ds   Rxr 2016.04.27 13:50

这个怎么说呢,stack是线程安全的,而用linkedlist实现可以是非线程安全,也可以是线程安全,具体可以靠自己的实现机制。
而stack基调已经定了,Vector也是线程安全的,所以选用了Vector。
而且根据源码发现:
stack用Vector只需要增加栈元素的入栈和弹出以及搜索就可以了:
public E push(E item) {
addElement(item);

    return item;
}

/**
 * Removes the object at the top of this stack and returns that
 * object as the value of this function.
 *
 * @return  The object at the top of this stack (the last item
 *          of the <tt>Vector</tt> object).
 * @throws  EmptyStackException  if this stack is empty.
 */
public synchronized E pop() {
    E       obj;
    int     len = size();

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

    return obj;
}

/**
 * Looks at the object at the top of this stack without removing it
 * from the stack.
 *
 * @return  the object at the top of this stack (the last item
 *          of the <tt>Vector</tt> object).
 * @throws  EmptyStackException  if this stack is empty.
 */
public synchronized E peek() {
    int     len = size();

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

/**
 * Tests if this stack is empty.
 *
 * @return  <code>true</code> if and only if this stack contains
 *          no items; <code>false</code> otherwise.
 */
public boolean empty() {
    return size() == 0;
}

/**
 * Returns the 1-based position where an object is on this stack.
 * If the object <tt>o</tt> occurs as an item in this stack, this
 * method returns the distance from the top of the stack of the
 * occurrence nearest the top of the stack; the topmost item on the
 * stack is considered to be at distance <tt>1</tt>. The <tt>equals</tt>
 * method is used to compare <tt>o</tt> to the
 * items in this stack.
 *
 * @param   o   the desired object.
 * @return  the 1-based position from the top of the stack where
 *          the object is located; the return value <code>-1</code>
 *          indicates that the object is not on the stack.
 */
public synchronized int search(Object o) {
    int i = lastIndexOf(o);

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


    而linkedlist是具有链表形式的数据结构,不能像Vector那样直接扩展。
zjysource
zjysource 又被你抢了
一年多之前 回复
CSDNXIAOD
CSDNXIAOD   2016.04.27 14:22

用java.util.*中的LinkedList实现stack
简单实现Java中的LinkedList
java.util.Stack
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!