源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

JAVA Stack详细介绍和示例学习

  • 时间:2022-08-12 12:41 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:JAVA Stack详细介绍和示例学习
[b]第1部分 Stack介绍 [/b]Stack是栈。它的特性是:先进后出(FILO, First In Last Out)。 java工具包中的Stack是继承于Vector(矢量队列)的,由于Vector是通过数组实现的,这就意味着,Stack也是通过数组实现的,而非链表。当然,我们也可以将LinkedList当作栈来使用! Stack的继承关系 [img]http://img.1sucai.cn/uploads/article/2018010710/20180107100107_0_86092.jpg?2013105103322[/img] Stack和Collection的关系如下图: [img]http://img.1sucai.cn/uploads/article/2018010710/20180107100108_1_3621.jpg?2013105103346[/img] [b]Stack的构造函数 [/b]Stack只有一个默认构造函数,如下:
[u]复制代码[/u] 代码如下:
Stack()  
Stack的API
[u]复制代码[/u] 代码如下:
Stack是栈,它常用的API如下:              boolean       empty() synchronized E             peek() synchronized E             pop()              E             push(E object) synchronized int           search(Object o)
由于Stack和继承于Vector,因此它也包含Vector中的全部API。  第2部分 Stack源码解析 Stack的源码非常简单,下面我们对它进行学习。
[u]复制代码[/u] 代码如下:
package java.util; public class Stack<E> extends Vector<E> {     // 版本ID。这个用于版本升级控制,这里不须理会!     private static final long serialVersionUID = 1224463164541339165L;     // 构造函数     public Stack() {     }     // push函数:将元素存入栈顶     public E push(E item) {         // 将元素存入栈顶。         // addElement()的实现在Vector.java中         addElement(item);         return item;     }     // pop函数:返回栈顶元素,并将其从栈中删除     public synchronized E pop() {         E    obj;         int    len = size();         obj = peek();         // 删除栈顶元素,removeElementAt()的实现在Vector.java中         removeElementAt(len - 1);         return obj;     }     // peek函数:返回栈顶元素,不执行删除操作     public synchronized E peek() {         int    len = size();         if (len == 0)             throw new EmptyStackException();         // 返回栈顶元素,elementAt()具体实现在Vector.java中         return elementAt(len - 1);     }     // 栈是否为空     public boolean empty() {         return size() == 0;     }     // 查找“元素o”在栈中的位置:由栈底向栈顶方向数     public synchronized int search(Object o) {         // 获取元素索引,elementAt()具体实现在Vector.java中         int i = lastIndexOf(o);         if (i >= 0) {             return size() - i;         }         return -1;     } }
总结: (01) Stack实际上也是通过数组去实现的。        执行push时(即,将元素推入栈中),是通过将元素追加的数组的末尾中。        执行peek时(即,取出栈顶元素,不执行删除),是返回数组末尾的元素。        执行pull时(即,取出栈顶元素,并将该元素从栈中删除),是取出数组末尾的元素,然后将该元素从数组中删除。 (02) Stack继承于Vector,意味着Vector拥有的属性和功能,Stack都拥有。 [b]第3部分 Vector示例 [/b]下面我们通过实例学习如何使用Stack
[u]复制代码[/u] 代码如下:
import java.util.Stack; import java.util.Iterator; import java.util.List; /**  * @desc Stack的测试程序。测试常用API的用法  *  * @author skywang  */ public class StackTest {     public static void main(String[] args) {         Stack stack = new Stack();         // 将1,2,3,4,5添加到栈中         for(int i=1; i<6; i++) {             stack.push(String.valueOf(i));         }         // 遍历并打印出该栈         iteratorThroughRandomAccess(stack) ;         // 查找“2”在栈中的位置,并输出         int pos = stack.search("2");         System.out.println("the postion of 2 is:"+pos);         // pup栈顶元素之后,遍历栈         stack.pop();         iteratorThroughRandomAccess(stack) ;         // peek栈顶元素之后,遍历栈         String val = (String)stack.peek();         System.out.println("peek:"+val);         iteratorThroughRandomAccess(stack) ;         // 通过Iterator去遍历Stack         iteratorThroughIterator(stack) ;     }     /**      * 通过快速访问遍历Stack      */     public static void iteratorThroughRandomAccess(List list) {         String val = null;         for (int i=0; i<list.size(); i++) {             val = (String)list.get(i);             System.out.print(val+" ");         }         System.out.println();     }     /**      * 通过迭代器遍历Stack      */     public static void iteratorThroughIterator(List list) {         String val = null;         for(Iterator iter = list.iterator(); iter.hasNext(); ) {             val = (String)iter.next();             System.out.print(val+" ");         }         System.out.println();     } }
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部