`
Donald_Draper
  • 浏览: 954993 次
社区版块
存档分类
最新评论

Java Stack用法

    博客分类:
  • JAVA
阅读更多
java.util.Stack类简介 :http://blog.csdn.net/a19881029/article/details/9408649
Stack是一个后进先出(last in first out,LIFO)的堆栈,在Vector类的基础上扩展5个方法而来
Deque(双端队列)比起Stack具有更好的完整性和一致性,应该被优先使用,Stack本身通过扩展Vector而来,而Vector本身是一个可增长的对象数组( a growable array of objects)那么这个数组的哪里作为Stack的栈顶,哪里作为Stack的栈底?
查看Stack源码:
//Stack
public class Stack extends Vector
{
    public Stack()
    {
    }
    //推obj入栈
    public Object push(Object obj)
    {
        addElement(obj);
        return obj;
    }
    //返回栈顶数据,并移除
    public synchronized Object pop()
    {
        int i = size();
        Object obj = peek();
        removeElementAt(i - 1);
        return obj;
    }
    //返回栈顶数据,不移除
    public synchronized Object peek()
    {
        int i = size();
        if(i == 0)
            throw new EmptyStackException();
        else
            return elementAt(i - 1);
    }
    //是否为空
    public boolean empty()
    {
        return size() == 0;
    }
   //返回离栈顶最近的obj的位置,不存在返回-1
    public synchronized int search(Object obj)
    {
        int i = lastIndexOf(obj);
        if(i >= 0)
            return size() - i;
        else
            return -1;
    }

    private static final long serialVersionUID = 1224463164541339165L;
}

结构:



测试:
package test;
import java.util.Stack;
public class testStack {
	public static void main(String[] args) {
		Stack<String> ts = new Stack<String>();
		System.out.println("======is empty:"+ts.empty());
		ts.push("1");
		ts.push("5");
		ts.push("2");
		ts.push("3");
		ts.push("2");
		ts.push("4");
		System.out.println("======peek:"+ts.peek());
		System.out.println("======size after peek:"+ts.size());
		System.out.println("======search not exists:"+ts.search(2));
		System.out.println("======search exists:"+ts.search("2"));
		System.out.println("======peek:"+ts.pop());
		System.out.println("======size after pop:"+ts.size());
	}
}

结果:
======is empty:true
======peek:4
======size after peek:6
======search not exists:-1
======search exists:2
======peek:4
======size after pop:5
  • 大小: 19.8 KB
0
1
分享到:
评论

相关推荐

    用java实现的栈Stack类

    用java实现的栈Stack类,不继承任何集合类,用对象数组实现

    java堆栈类使用实例(java中stack的使用方法)

    java中stack的使用方法,堆栈是一种"后进先出"(LIFO) 的数据结构, 只能在一端进行插入(称为"压栈") 或删除 (称为"出栈")数据的操作,下面看示例吧

    java-stack-trace

    java-stack-trace是一个用于调试的java instrument,指定方法前缀,它能在指定前缀的方法被调用时打印当前堆栈。 由于asm的限制,仅支持jdk1.8及以上 编译 mvn package 用法 在java命令后添加-javaagent参数 -java...

    深入分析JAVA Vector和Stack的具体用法

    主要介绍了深入分析JAVA Vector和Stack的具体用法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    【Java面试+Java学习指南】 一份涵盖大部分Java程序员所需要掌握的核心知识

    Java集合详解1:一文读懂ArrayList,Vector与Stack使用方法和实现原理 Java集合详解2:Queue和LinkedList Java集合详解3:Iterator,fail-fast机制与比较器 Java集合详解4:HashMap和HashTable Java集合详解5:深入...

    javaStack:从头开始创建堆栈及其功能

    javaStack 从头开始创建堆栈及其功能 该堆栈将使用的方法如下 推送:将元素添加到堆栈顶部 弹出:删除堆栈顶部的元素 isEmpty:检查布尔值是否为空的简单布尔值 isFull:检查布尔值是否完整的简单布尔值 popAll:从...

    Java工程师面试复习指南

    Java集合详解:一文读懂ArrayList,Vector与Stack使用方法和实现原理 Java集合详解:Queue和LinkedList Java集合详解:迭代器,快速失败机制与比较器 Java集合详解:HashMap和HashTable Java集合详解:深入理解...

    Java小假期第一次作业

    请编写程序,分别使用循环和递归两种方法计算斐波那契数列第9项是几? 斐波那契数列的第1项为1,第2项为1,后续任意项的值为其前两项的和。 请补齐Fibo.java文件中的代码 4. 实现Array类中的indexOf函数;...

    (超赞)JAVA精华之--深入JAVA API

    3.1 Log4j基本使用方法 3.2 Dom4j 使用简介 3.3 Java 语言的 XML 验证 API 3.4 hibernate的hello word 3.5 JavaMail(JAVA邮件服务)API详解 3.6 jxl.jar 包简介 3.7 Java与XML联合编程之SAX篇 3.8 Java与XML联合...

    廖雪峰 Java 教程.doc

    使用Stack 使用Iterator 使用Collections IO File对象 InputStream OutputStream Filter模式 操作Zip 读取classpath资源 序列化 Reader Writer PrintStream和PrintWriter 日期与时间 基本概念 Date...

    【资源免费下载】Java代码积累丨大话设计模式(Java实现版本)、线程协作

    Java代码加速器 Java代码积累:并发 设计模式 数据结构 ...Stack - 使用泛型实现Stack 生成斐波那契数列 使用容器 利用迭代器实现原材料 实用程序 StringUtil类 - 封装常用的String方法 基本的 正则表达式的使用方式

    Java开发详解.zip

    031315_【第13章:Java类集】_Stack类笔记.pdf 031316_【第13章:Java类集】_属性类:Properties笔记.pdf 031317_〖第13章:Java类集〗_范例讲解:一对多关系笔记.pdf 031318_〖第13章:Java类集〗_范例讲解:多对多...

    Java 基础核心总结 +经典算法大全.rar

    null 只是-种特殊的值使用 Null-Safe 方法null 判断 关于思维导图 Java.IO Java.lang Java.math Java.net Java 基础核心总结 V2.0 IO 传统的 BIO BIO NIO 和 AIO 的区别什么是流 流的分类 节点流和处理流 Java ...

    java 课程 实验

    1. 熟悉Java中的String、StringBuffer、Math、包装器类的使用方法。 2. 使用常用类解决一般性的应用问题。 3. 掌握JavaSE API文档的使用方法。 二、实验内容 1. 编写一个程序,输出一个字符串中的大写英文字母数,...

    java 编程入门思考

    3.1 使用Java运算符 3.1.1 优先级 3.1.2 赋值 3.1.3 算术运算符 3.1.4 自动递增和递减 3.1.5 关系运算符 3.1.6 逻辑运算符 3.1.7 按位运算符 3.1.8 移位运算符 3.1.9 三元if-else运算符 3.1.10 逗号运算符 3.1.11 ...

    JAVA SE学习精华集锦

    3.1 Log4j基本使用方法 119 3.2 Dom4j 使用简介 120 3.3 Java 语言的 XML 验证 API 138 3.4 hibernate的hello word 143 3.5 JavaMail(JAVA邮件服务)API详解 145 3.6 jxl.jar 包简介 150 3.7 Java与XML联合编程之...

    用java实现的栈,通过使用ArrayList的方法

    此方法是通过java提供的ArrayList方法对栈的实现;

    Java初学者入门教学

    3.1 使用Java运算符 3.1.1 优先级 3.1.2 赋值 3.1.3 算术运算符 3.1.4 自动递增和递减 3.1.5 关系运算符 3.1.6 逻辑运算符 3.1.7 按位运算符 3.1.8 移位运算符 3.1.9 三元if-else运算符 3.1.10 逗号运算符 3.1.11 ...

    java联想(中文)

    3.1 使用Java运算符 3.1.1 优先级 3.1.2 赋值 3.1.3 算术运算符 3.1.4 自动递增和递减 3.1.5 关系运算符 3.1.6 逻辑运算符 3.1.7 按位运算符 3.1.8 移位运算符 3.1.9 三元if-else运算符 3.1.10 逗号运算符 3.1.11 ...

    java编程中影响性能的一些点

    1.尽量使用final修饰符。  带有final修饰符的类是不可派生... 调用方法时传递的参数以及在调用中创建的临时变量都保存在栈(Stack)中,速度较快。其他变量,如静态变量,实例变量等,都在堆(Heap)中创建,速度较慢。

Global site tag (gtag.js) - Google Analytics