zoukankan      html  css  js  c++  java
  • 【Java集合的详细研究9】Java堆栈(stack)的使用方法

    栈是一种常用的数据结构,栈只允许访问栈顶的元素,栈就像一个杯子,每次都只能取杯子顶上的东西,而对于栈就只能每次访问它的栈顶元素,
    从而可以达到保护栈顶元素以下的其他元素.”先进后出”或”后进先出”就是栈的一大特点,
    先进栈的元素总是要等到后进栈的元素出栈以后才能出栈.递归就是利用到了系统栈,暂时保存临时结果,对临时结果进行保护.

    栈是存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中。)。

    栈和常量池中的对象可以共享,对于堆中的对象不可以共享。栈中的数据大小和生命周期是可以确定的,当没有引用指向数据时,这个数据就会消失。堆中的对象的由垃圾回收器负责回收,因此大小和生命周期不需要确定。局部变量的数据存在于栈内存中。栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈中主要存放一些基本类型的变量数据(int, short, long, byte, float, double, boolean, char)和对象句柄(引用)。

    堆栈是一种 “后进先出”  (LIFO) 的数据结构, 只能在一端进行插入(称为 “压栈” ) 或删除 (称为“出栈”)数据的操作。

    
    

    JAVA 中,使用 java.util.Stack 类的构造方法创建对象。

    
    

     public class Stack extends vector

    
    

     构造方法 : public Stack() 创建一个空 Stack。

    
    

    方法:  1. public push  (item )  把项 压入栈顶。其作用与 addElement (item ) 相同。

    
    

          参数 item 压入栈顶的项 。 返回: item 参数 ;

    
    

        2. public pop () 移除栈顶对象,并作为函数的值 返回该对象。

    
    

          返回:栈顶对象(Vector 对象的中的最后一项)。

    
    

          抛出异常 : EmptyStackException 如果堆栈式空的 。。。

    
    

        3. public peek() 查看栈顶对象而不移除它。。 

    
    

          返回:栈顶对象(Vector 对象的中的最后一项)。

    
    

          抛出异常 : EmptyStackException 如果堆栈式空的 。。。

    
    

        4. public boolean empty (测试堆栈是否为空。)  当且仅当堆栈中不含任何项时 返回 true,否则 返回 false.

    
    

        5. public int search  (object o)  返回对象在堆栈中位置, 以 1 为基数, 如果对象 o是栈中的一项,该方法返回距离 栈顶最近的出现位置到栈顶的距离; 栈中最上端项的距离

    
    
    //栈,Vector的子类
    public class StackDemo {
        // 把元素放入栈顶
        static void showpush(Stack st, int a) {
            st.push(new Integer(a));
            System.out.println("push(" + a + ")");
            System.out.println("stack: " + st);
        }
    
        // 从栈顶删除元素
        static void showpop(Stack st) {
            System.out.print("pop -> ");
            // 判断栈是否为空
            if (st.empty()) {
                System.out.println("Stack is empty.");
            } else {
                Integer a = (Integer) st.pop();
                System.out.println(a);
                System.out.println("stack: " + st);
            }
        }
    
        // 查看栈顶元素
        static void showpeek(Stack st) {
            System.out.print("peek -> ");
            if (st.empty()) {
                System.out.println("Stack is empty.");
            } else {
                Integer a =  (Integer) st.peek();
                System.out.println(a);
                System.out.println("stack: " + st);
            }
        }
    
        // 查询指定元素
        static void showsearch(Stack st, int i) {
            System.out.print("search -> " + i);
            Integer index = (Integer) st.search(i);
            System.out.println("--index -> " + index);
            System.out.println("stack: " + st);
        }
    
        public static void main(String args[]) {
            Stack st = new Stack();
            System.out.println("stack: " + st);
            showpush(st, 42);
            showpush(st, 66);
            showpeek(st);
            showsearch(st, 66);
            showsearch(st, 88);
            showpop(st);
            showpop(st);
            showpop(st);
        }
    }
    
    

    运行结果:

    stack: []
    push(42)
    stack: [42]
    push(66)
    stack: [42, 66]
    peek -> 66
    stack: [42, 66]
    search -> 66--index -> 1
    stack: [42, 66]
    search -> 88--index -> -1
    stack: [42, 66]
    pop -> 66
    stack: [42]
    pop -> 42
    stack: []
    pop -> Stack is empty.

     
  • 相关阅读:
    rails 给类添加属性
    workflow engine Ruote初体验之二(通用属性)
    workflow engine Ruote初体验之一(概念)
    workflow engine Ruote 安装
    文字编码
    C# 制作Windows服务安装包
    Ruby on rails初体验(三)
    18-语言入门-18-鸡兔同笼
    17-语言入门-17-笨小熊
    16-语言入门-16-谁获得了最高奖学金
  • 原文地址:https://www.cnblogs.com/guweiwei/p/6516601.html
Copyright © 2011-2022 走看看