剑指offer打卡Day18 栈的压入、弹出序列(重新学习 Vector 与 Stack)

剑指offer打卡Day18: 栈的压入、弹出序列

题目描述

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)

示例

输入

[1,2,3,4,5],[4,3,5,1,2]

返回值

false

解析:

栈是非常基础的一种数据结构,不过在铲屎工作中用的不多,特地复习下,Crtl+ 点击源码,好家伙,一上来就是public class Stack<E> extends Vector<E>,那只能从Vector开始看起

  • Vector

    • Vector原意:矢量、向量,因此一般称作矢量队列,查看其源码

      public class Vector<E>
          extends AbstractList<E>
          implements List<E>, RandomAccess, Cloneable, java.io.Serializable
      

      可得:

      1. 继承了AbstractList,实现了List,所以,它是一个队列,支持相关的添加、删除、修改、遍历等功能
      2. 实现了RandmoAccess接口,即提供了随机访问功能
        • RandmoAccess是java中用来被List实现,为List提供快速访问功能的。
        • 在Vector中,我们即可以通过元素的序号快速获取元素对象;这就是快速随机访问。
      3. 实现了Cloneable接口,即实现clone()函数。它能被克隆。
      4. 同是list,但ArrayList不同,可由代码中的synchronized 得知 Vector中的操作是线程安全的
    • Vector 继承关系:

      java.lang.Object
         ↳     java.util.AbstractCollection<E>
               ↳     java.util.AbstractList<E>
                     ↳     java.util.Vector<E>
      

      Vector的数据结构和ArrayList差不多,它包含了3个成员变量:elementData , elementCount, capacityIncrement。

      1. elementData 是"Object[]类型的数组",它保存了添加到Vector中的元素。elementData是个动态数组,如果初始化Vector时,没指定动态数组的>大小,则使用默认大小10。随着Vector中元素的增加,Vector的容量也会动态增长,capacityIncrement是与容量增长相关的增长系数,具体的增长方式,请参考源码分析中的ensureCapacity()函数。
      2. elementCount 是动态数组的实际大小。
      3. capacityIncrement 是动态数组的增长系数。如果在创建Vector时,指定了capacityIncrement的大小;则,每次当Vector中动态数组容量增加时>,增加的大小都是capacityIncrement。
    • Vector的构造函数

      // 默认构造函数,创建一个默认的向量,默认大小为 10;
      public Vector()
      
      // capacity是Vector的默认容量大小。当由于增加数据导致容量增加时,每次容量会增加一倍。
      public Vector(int capacity)
      
      // capacity是Vector的默认容量大小,capacityIncrement是每次Vector容量增加时的增量值。
      public Vector(int capacity, int capacityIncrement)
      
      // 创建一个包含collection的Vector
      public Vector(Collection<? extends E> collection)
      
    • Vector 常用API实例汇总

      public class VectorDemo {
             
      
          public static void main(String args[]) {
             
              // initial size is 3, increment is 2
              Vector v = new Vector(3, 2);
              System.out.println("Initial size(容量大小): " + v.
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值