<强>概要强>
学完向量了之后,接下来我们开始学习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
堆栈和收集的关系如下图:
<强>堆栈的构造函数强>
堆栈只有一个默认构造函数,如下:
堆栈()
堆栈的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;iJava集合栈源码详解