当前位置: 移动技术网 > IT编程>开发语言>Java > JAVA Stack详细介绍和示例学习

JAVA Stack详细介绍和示例学习

2019年07月22日  | 移动技术网IT编程  | 我要评论

张俪春漾大片曝光,女人公敌4高清完整版,邝宝强

第1部分 stack介绍
stack是栈。它的特性是:先进后出(filo, first in last out)。
java工具包中的stack是继承于vector(矢量队列)的,由于vector是通过数组实现的,这就意味着,stack也是通过数组实现的,而非链表。当然,我们也可以将linkedlist当作栈来使用!

stack的继承关系

stack和collection的关系如下图:

stack的构造函数
stack只有一个默认构造函数,如下:
复制代码 代码如下:

stack()
 

stack的api
复制代码 代码如下:

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的源码非常简单,下面我们对它进行学习。
复制代码 代码如下:

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都拥有。

第3部分 vector示例
下面我们通过实例学习如何使用stack
复制代码 代码如下:

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();
    }
}

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网