java集合系列——List集合之Stack介绍(五)「建议收藏」

Stack的简介Stack 类表示后进先出(LIFO)的对象堆栈。它通过五个操作对类 Vector 进行了扩展 ,允许将向量视为堆栈。它提供了通常的 push 和 pop 操作,以及取堆栈顶点的 peek 方法、测试堆栈是否为空的 empty 方法、在堆栈中查找项并确定到堆栈顶距离的 search 方法。

大家好,又见面了,我是全栈君。

1.Stack的简介

Stack 类表示后进先出(LIFO)的对象堆栈。它通过五个操作对类 Vector 进行了扩展 ,允许将向量视为堆栈。它提供了通常的 push 和 pop 操作,以及取堆栈顶点的 peek 方法、测试堆栈是否为空的 empty 方法、在堆栈中查找项并确定到堆栈顶距离的 search 方法。
因为它继承自Vector,那么它的实现原理是以数组实现堆栈的。如果要以链表方式实现堆栈可以使用LinkedList!

2.Stack的继承关系

java.lang.Object
  继承者 java.util.AbstractCollection<E>
      继承者 java.util.AbstractList<E>
          继承者 java.util.Vector<E>
              继承者 java.util.Stack<E>
所有已实现的接口:
Serializable, Cloneable, Iterable<E>, Collection<E>, List<E>, RandomAccess

并且从类 java.util.Vector 继承的字段

capacityIncrement, elementCount, elementData 

从类 java.util.AbstractList 继承的字段

modCount

3.Stack的API
Stack API

Stack只有下面四个方法!由于Stack继承了Vector ,它也有Vector的API方法!

boolean empty() 
      测试堆栈是否为空。
E   peek() 
      查看堆栈顶部的对象,但不从堆栈中移除它。
E   pop() 
      移除堆栈顶部的对象,并作为此函数的值返回该对象。
E   push(E item) 
      把项压入堆栈顶部。
int search(Object o) 
      返回对象在堆栈中的位置,以 1 为基数。

4.源码

public
class Stack<E> extends Vector<E> { 
   
    /** * 创建一个空堆栈。 */
    public Stack() {
    }

    /** * 把项压入堆栈顶部。其作用与下面的方法完全相同: * * item - 压入堆栈的项。 * * @return 返回 item 参数。 */
    public E push(E item) {
        addElement(item);//是Vector中的方法,详细实现请查看Vector的源码

        return item;
    }

    /** * 移除堆栈顶部的对象,并作为此函数的值返回该对象。 * * @return 堆栈顶部的对象( Vector 对象中的最后一项)。 * @throws EmptyStackException if this stack is empty. */
    public synchronized E pop() {
  
  //注意此方法是 synchronized修饰的,同步方法
        E       obj;
        int     len = size();

        obj = peek();
        removeElementAt(len - 1);//是Vector中的方法,详细实现请查看Vector的源码

        return obj;
    }

    /** * 查看堆栈顶部的对象,但不从堆栈中移除它。 * */
    public synchronized E peek() {
        int     len = size();

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

    /** * Tests if this stack is empty. * * 测试堆栈是否为空。 为空返回 true */
    public boolean empty() {
        return size() == 0;
    }

    /** * 返回对象在堆栈中的位置,以 1 为基数。如果对象 o是堆栈中的一个项, * 此方法返回距堆栈顶部最近的出现位置到堆栈顶部的距离; * 堆栈中最顶部项的距离为 1。使用 equals 方法比较 o 与堆栈中的项。 * * @param o the desired object. o - 目标对象。 * @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. * 返回 : 对象到堆栈顶部的位置,以 1 为基数;返回值 -1 表示此对象不在堆栈中。 */
    public synchronized int search(Object o) {
  
  //注意此方法为 synchronized
        int i = lastIndexOf(o);

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

    /** use serialVersionUID from JDK 1.0.2 for interoperability */
    private static final long serialVersionUID = 1224463164541339165L;
}

5.总结

(1) Stack实际上也是通过数组去实现的。实际调用的实现方法都是Vector中的方法!
– push时(即,将元素推入栈中),是通过将元素追加的数组的末尾中。

  • peek时(即,取出栈顶元素,不执行删除),是返回数组末尾的元素。

  • pop时(即,取出栈顶元素,并将该元素从栈中删除),是取出数组末尾的元素,然后将该元素从数组中删除。

(2) Stack继承于Vector,Stack拥有着Vector的属性和功能!


java集合系列——java集合概述(一)
java集合系列——List集合之ArrayList介绍(二)
java集合系列——List集合之LinkedList介绍(三)
java集合系列——List集合之Vector介绍(四)
java集合系列——List集合之Stack介绍(五)
java集合系列——List集合总结(六)
java集合系列——Map介绍(七)
java集合系列——Map之HashMap介绍(八)
java集合系列——Map之TreeMap介绍(九)
java集合系列——Set之HashSet和TreeSet介绍(十)



如果帅气(美丽)、睿智(聪颖),和我一样简单善良的你看到本篇博文中存在问题,请指出,我虚心接受你让我成长的批评,谢谢阅读!
祝你今天开心愉快!


欢迎访问我的csdn博客,我们一同成长!

不管做什么,只要坚持下去就会看到不一样!在路上,不卑不亢!

博客首页http://blog.csdn.net/u010648555

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/121184.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • tcpip3次握手的通信过程是_tcp协议为什么要三次握手

    tcpip3次握手的通信过程是_tcp协议为什么要三次握手关于tcp通信过程中的三次握手、四次挥手的过程三次握手:此过程中:第一次握手,客户端先发一个SYN请求并附带一个J的值给服务端第二次握手,服务端收到请求后解堵塞,发送一个SYN请求并附带一个K值,还发送了第一次握手后对客户端的响应包并附带在之前接收到的J值的基础上加上1,即J+1第三次握手,客户端收到服务端发来的SYN请求和K值后,再发送一个K+1的响应包给服务端至此,三次握手成功…

    2022年8月18日
    5
  • HTML 5 video 视频标签全属性详解

    HTML 5 video 视频标签全属性详解

    2021年9月25日
    53
  • mongovue 导入mysql_MongoVUE简单操作手册「建议收藏」

    mongovue 导入mysql_MongoVUE简单操作手册「建议收藏」本文转自网络,对疑问的地方做了修改MongoVUE是个比较好用的MongoDB客户端,需要注册,但是可以变成永久使用,一、基础操作新增一个连接进入的界面形如二、进阶操作1、查看所有数据,会有三种格式的观看方式,分别为树形,表格,bjosn,详情见1.12、查看特定的数据,使用的时候shell命令,需要一些基础的语法知识,详情见2.13、更新数据,详情见3.14、删除数据,慎用,如果没有备份,删除…

    2022年8月21日
    5
  • Java异常分类及处理

    Java异常分类及处理

    2021年7月3日
    75
  • 数据库建表规则_SQL创建数据表

    数据库建表规则_SQL创建数据表–数据库建表语句的规范小结建表语句的规范:1.字段的设计   A.数据类型尽量用数字类型,数字类型的比字符类型的要快很多。  B.数据类型尽量小,这里的尽量小是指在满足可以预见的未来需求的前提下的,但是有不能太小,  上次监控系统里面的表mon_tair_stat_detail_2012_1的data_size和use_size定义的是int(15)实际上

    2025年8月26日
    7
  • js字符串截取为数组

    js字符串截取为数组varstr=”hello,word,java,eclipse,jsp”;//字符串截取为数组varstrArr=str.split(“,”);for(j=0,len=strArr.length;j<len;j++){alert(strArr[j]);};

    2022年5月1日
    56

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号