集合篇-Stack(JAVA)

集合篇-Stack(JAVA)

编程文章jaq1232025-05-22 11:03:325A+A-

前言

Stack类从命名就可以很清晰的定位成栈,栈的特性是先进后出或者后进先出。而且从jdk给出的文档也很清楚的知道它的一些特性。

demo案例执行结果

源码解析

从下面的图中就可以很清楚的知道Stack是继承Vector,所以它是拥有Vector相关的一些特性和方法;再者就是它也是线程安全类。

Stack类中主要的几个方法push、pop、peek、empty、search

1、push方法

//向栈中添加一个元素
public E push(E item) {
  	//这里直接调用了父类Vector的addElement方法
    addElement(item);
    return item;
}
//java.util.Vector#addElement
public synchronized void addElement(E obj) {
    modCount++;
    add(obj, elementData, elementCount);
}

2、peek

//获取数组中的最后一个元素,来实现栈的后进先出的特性
//注意,使用前需要对数组判空处理,否则会抛EmptyStackException
public synchronized E peek() {
    int     len = size();

    if (len == 0)
        throw new EmptyStackException();
  	//这里是直接调用Vector类中的elementAt方法
    return elementAt(len - 1);
}

3、pop

//获取并删除数组中最后一个元素,
//注意,使用前需要对数组判空处理,否则会抛EmptyStackException
public synchronized E pop() {
    E       obj;
    int     len = size();
		//获取数组中最后一个元素
    obj = peek();
  	//删除数据中最后一个元素
    removeElementAt(len - 1);
    return obj;
}

4、search

//获取元素最后的位置下标
public synchronized int search(Object o) {
    int i = lastIndexOf(o);

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

总结

其实Stack是线程安全的,继承类Vector类,拥有栈特性(先进后出或者后进先出)。

上面就是对Stack类简单的介绍,如果有兴趣或者理解不对的地方可以留言。

点击这里复制本文地址 以上内容由jaq123整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!

苍茫编程网 © All Rights Reserved.  蜀ICP备2024111239号-21