【Java集合的详细研究9】Java堆栈(stack)的使用方法

来源:互联网 发布:北京软件行业协会 编辑:程序博客网 时间:2024/06/05 09:46

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

栈是存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(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.

 
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 如果晚上睡不着该怎么办 晚上睡不着觉该怎么办 晚上睡不着该怎么办呢 晚上失眠睡不着该怎么办 晚上一直睡不着该怎么办 怀孕晚上睡不着该怎么办 运动太累睡不着怎么办 运动完睡不着觉怎么办 晚上冷得睡不着怎么办 晚上脚冷睡不着怎么办 短发头发有点乱怎么办 不想让别人睡觉怎么办 15岁晚上睡不着怎么办 16岁青少年失眠怎么办 好累又睡不着怎么办 造口患者拉肚子怎么办? 起床后头发乱怎么办 新生儿睡觉偏头怎么办 婴儿睡觉偏头怎么办 月经期间血下不来怎么办 月经下不来怎么办一点点咖啡色 突然早睡睡不着怎么办 移植后睡不着觉怎么办 孕期喜欢右侧睡怎么办 减肥期间有饭局怎么办 减肥期间晚上聚餐怎么办 减肥中遇到聚餐怎么办 减肥期间遭遇聚餐怎么办? 减肥期间聚会了怎么办 小猫摔到腿了怎么办 晚上睡觉颈椎痛怎么办 孕妇胎儿腿短怎么办 胎宝宝腿短怎么办 孕妇左侧卧睡不着怎么办 大人高烧40.5度怎么办 睡觉后颈椎疼怎么办 发烧到40度怎么办 背疼做针灸没效果怎么办 做完针灸后腰酸背疼怎么办 身体堵的厉害怎么办 身体淤堵严重怎么办