Java集合栈源码详解

  

<强>概要

  

学完向量了之后,接下来我们开始学习Stack.Stack很简单,它继承于向量。学习方式还是和之前一样,先对堆栈有个整体认识,然后再学习它的源码;最后再通过实例来学会使用它。

  

<强>第1部分栈介绍

  

<强>堆栈简介

  

堆栈是栈。它的特性是:先进后出(费罗,第一次在去年)。

  

java工具包中的堆栈是继承于向量(矢量队列)的,由于向量是通过数组实现的,这就意味着,堆栈也是通过数组实现的,而非链表。当然,我们也可以将LinkedList当作栈来使用!在“java集合系列向量06之详细介绍(源码解析)和使用示例”中,已经详细介绍过向量的数据结构,这里就不再对堆栈的数据结构进行说明了。

  

<强>堆栈的继承关系

  

. lang。对象
  & # 8627;,,,,java.util.AbstractCollection
  ,,& # 8627;,,,,java.util.AbstractList
  ,,,,,& # 8627;,,,,java.util.Vector
  ,,,,,,,,,& # 8627;,,,,java.util.Stack

  

公共类Stack扩展Vector{}
  

  

堆栈和收集的关系如下图:

  

  

<强>堆栈的构造函数

  

堆栈只有一个默认构造函数,如下:

  

堆栈()
  堆栈的API

  

堆栈是栈,它常用的API如下:

  
  

,,,,,,,,,,,boolean ,,,,,空()
  同步E ,,,,,,,,,,,peek ()
  同步E ,,,,,,,,,,,pop ()
  ,,,,,,,,,,,E ,,,,,,,,,,,推动(E对象)
  同步int ,,,,,,,,,搜索(对象o)
  

     

由于堆栈和继承于向量,因此它也包含向量中的全部API。

  

<强>第2部分栈源码解析(基于JDK1.6.0_45)

  

堆栈的源码非常简单、下面我们对它进行学习。

        包java.util;      公共   类Stack扩展Vector{//版本ID。这个用于版本升级控制,这里不须理会!   私有静态最终长serialVersionUID=1224463164541339165 l;//构造函数   公共堆栈(){   }//把函数:将元素存入栈顶   公共E推(E项){//将元素存入栈顶。//addElement()的实现在Vector.java中   addElement(项);      返回项目;   }//流行函数:返回栈顶元素,并将其从栈中删除   公共同步E pop () {   E obj;   int len=大小();      obj=peek ();//删除栈顶元素,removeElementAt()的实现在Vector.java中   removeElementAt (len - 1);      返回obj;   }//peek函数:返回栈顶元素,不执行删除操作   公共同步E peek () {   int len=大小();      如果(len==0)   把新EmptyStackException ();//返回栈顶元素,elementAt()具体实现在Vector.java中   返回elementAt (len - 1);   }//栈是否为空   公共布尔空(){   返回的大小()==0;   }//查找“元素o”在栈中的位置:由栈底向栈顶方向数   公共同步int搜索(对象o) {//获取元素索引,elementAt()具体实现在Vector.java中   int i=lastIndexOf (o);      如果(我在=0){   返回的大小()——我;   }   返回1;   }   }      之前      

总结:

  

(01)堆栈实际上也是通过数组去实现的。
  执行推动时(即,将元素推入栈中),是通过将元素追加的数组的末尾中。
  执行peek时(即,取出栈顶元素,不执行删除),是返回数组末尾的元素。
  执行流行时(即,取出栈顶元素,并将该元素从栈中删除),是取出数组末尾的元素,然后将该元素从数组中删除。
  (02)堆栈继承于向量,意味拥着向量有的属性和功能,堆栈都拥有。

  

第3部分向量示例

  

下面我们通过实例学习如何使用堆栈

        进口java.util.Stack;   进口java.util.Iterator;   进口并不知道;/* *   * @desc堆栈的测试程序。测试常用API的用法   *   * @author skywang   */公开课StackTest {      公共静态void main (String [] args) {   堆栈栈栈=new ();//将1、2、3、4、5添加到栈中   for (int i=1;i<6;我+ +){   stack.push (String.valueOf (i));   }//遍历并打印出该栈   iteratorThroughRandomAccess(栈);//查找“2”在栈中的位置,并输出   int pos=stack.search (“2”);   system . out。println(“2的位置是:”+ pos);//小狗栈顶元素之后,遍历栈   stack.pop ();   iteratorThroughRandomAccess(栈);//peek栈顶元素之后,遍历栈   字符串val=(字符串)stack.peek ();   System.out.println(“看一眼:“+ val);   iteratorThroughRandomAccess(栈);//通过迭代器去遍历堆栈   iteratorThroughIterator(栈);   }/* *   *通过快速访问遍历堆栈   */公共静态孔隙iteratorThroughRandomAccess列表(列表){   字符串val=零;   for (int i=0;i

Java集合栈源码详解