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 又被你抢了
大约 2 年之前 回复
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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Java用LinkedList实现的Stack
LinkedList具有能够直接实现栈所有功能的方法,因此可以直接将LinkedList作为栈使用,现在可以直接生成一个真正的栈。
c#自定义LinkedList Queue Stack
//MyLinkedList         Node node1 = new Node(1);         Node node2 = new Node(2);         Node node3 = new Node(3);         Node node4 = new Node(4);         Node node5 = new Node(5);         M
基于“用java.util.*中的LinkedList实现stack” 2.0版
/*在上次写“用java.util.*中的LinkedList实现stack”的同时我也把这篇文章发到了javaResearch.org在网友的提议下,觉得这stack还有可以改进的地方,主要可以在stack中加入一个栈元素个数的变量size,在出栈和入栈的时候改变同时再加上一个栈顶指针,就更象一栈了, 现在把程序改成如下:*/import java.util.*;class MyStack{ p
Java用LinkedList实现栈
import java.util.LinkedList; public class MyStack { private LinkedList ll=new LinkedList(); public void push(Object o) { ll.addFirst(o); } public Object pop() { if(ll.isEmpty()) { Syst
java中使用LinkedList实现stack机制
(java入门新手)  package cn.rwm.test; import java.util.LinkedList; public class Test {  public static void main(String[] args)     {       Stack stack=new Stack();       stack.push("aa");
java 中的Stack、Queue、Deque
1.Stack java集合框架中没有Stack接口,仅仅有java早期遗留下来的一个Stack类。 Java.util.Stackpublic Stack extends Vector 因为集成自Vector,所以Stack类是同步的,效率不高。官方一般建议这样使用ArrayDeque代替Stack Deque stack = new ArrayDeque(); 2.Queue
List以及arrayList,linkedlist,vector,以及stack的区别
List以及arrayList,linkedlist,vector,以及stack的区别 首先List是接口,而后面四个是它的实现类 1.arrayList是一个数组,查询效率快,但是插入删除效率低,这是由于数组的特性决定的 2.linkedlist双链表,查询效率低,但是插入删除效率高,这是由于链表的特性决定的 3.vector同arrayList相似,只不过vector是线程安全的
ArrayList,LinkedList,Vector,Stack之间的区别
从多个方面讨论它们之间的区别: 1,线程安全性 2,实现方式 3,容量扩展方面 4,效率方面
Java容器(二):强大的LinkedList
前言——容器的类型 容器从最大的概念来分:分为Collection和Map,区别就是Collection是一个槽的,Map是两个槽的(键值对) Collection划分为:List,Set,Queue List一般使用:ArrayList,LinkedList Set一般使用:HashSet,TreeSet,LinkedHashSet Queue一般使用:Queue,PriorityQueue
java的list几种实现方式的效率(ArrayList、LinkedList、Vector、Stack),以及 java时间戳的三种获取方式比较
一、list简介List列表类,顺序存储任何对象(顺序不变),可重复。 List是继承于Collection的接口,不能实例化。实例化可以用: ArrayList(实现动态数组),查询快(随意访问或顺序访问),增删慢。整体清空快,线程不同步(非线程安全)。数组长度是可变的百分之五十延长 LinkedList(实现链表),查询慢,增删快。 Vector(实现动态数组),都慢,被