首页 > 编程语言 >Java中栈的创建与其常见的应用场景

Java中栈的创建与其常见的应用场景

时间:2023-05-06 20:57:36浏览次数:38  
标签:peek 场景 Java arrQue 中栈 System println linkedQue push

(1)Java中栈的创建方式

  ① 使用Stack类

  Java提供了最容易根据名字想起的Stack类,这也是在Java 6以及更早版本常用的方式。

Stack<String> stack = new Stack<>(); // 创建一个栈,泛型为String,一般来讲String作为泛型是很安全的
stack.push("AAAI");
stack.push("KDD");
stack.push("SIGIR");
stack.push("WSDM");
System.out.println(stack.pop()); // 输出"WSDM",并将其从栈中移除,表明后进先出
System.out.println(stack.peek()); // 输出"SIGIR",不移除栈顶元素"SIGIR",只查看,也体现后进先出

  以下是Stack类中的一类常用方法:

public class Stack<E> extends Vector<E> {
  
    public Stack() { // 构造方法
    }

    public E push(E item) { // 往栈中添加元素
        addElement(item);

        return item;
    }

    public synchronized E pop() { // 移除栈顶元素, 该方法是线程安全的
        E       obj;
        int     len = size();

        obj = peek();
        removeElementAt(len - 1);

        return obj;
    }

    public synchronized E peek() { // 查看栈顶元素,该方法是线程安全的
        int     len = size();

        if (len == 0)
            throw new EmptyStackException();
        return elementAt(len - 1);
    }
    public boolean empty() { // 判断栈空
        return size() == 0;
    }
}

  ②使用Deque接口的实现类来创建栈(推荐使用)

  在Java开发中,使用Deque接口的实现类来创建栈是最常用和主流的方式之一。Deque接口根据其名字可知,Deque : double-end queue(双端队列)。众所周知,根据不同的设计方式,队列可以形成栈,栈也可组成队列,故在Deque接口中提供了用来操作队列和栈的方法,并且在其子类中进行了实现。最常用的两个实现类分别是ArrayDeque和LinkedList,第一个表示是使用数组来进行实现的双端队列,可以在两端进行元素的添加和删除操作,并且在数据量比较大的时候仍可以高效的工作。而第二个LinkedList的底层是使用双向链表来实现的,与ArrayDeque相比,它的性能略低,但是它在元素的插入和删除操作方面比较灵活。

  这两种的部分用法如下所示:

ArrayDeque(栈)实现类的简单使用:
public void testArrayQue(){ Deque<String> arrQue = new ArrayDeque<>(); arrQue.push("济公"); arrQue.push("李文龙"); arrQue.push("钱掌柜"); arrQue.push("王掌柜"); arrQue.push("李管家"); String pop = arrQue.pop(); System.out.println(pop); // 输出:李管家 String peek = arrQue.peek(); System.out.println(peek); // 输出:王掌柜 System.out.println(Arrays.toString(arrQue.toArray())); // 输出:[王掌柜, 钱掌柜, 李文龙, 济公] }
LinkedList(栈)实现类的简单使用:
public void testLinkedList(){
        Deque<Integer> linkedQue = new LinkedList<>();

        linkedQue.push(123);
        linkedQue.push(234);
        linkedQue.push(345);
        linkedQue.push(456);
        linkedQue.push(567);

        Integer pop = linkedQue.pop();
        System.out.println(pop); // 输出:567

        Integer peek = linkedQue.peek();
        System.out.println(peek); // 输出:456

        System.out.println(linkedQue); // 输出:[456, 345, 234, 123]
}

(2)栈常见的应用场景

  ① 浏览器的历史记录; ② 缓存的实现;③ activity的启动模式;④ CPU中栈的实现;⑤ word自动保存;⑥ 解析计算式;⑦ 解析xml或json;⑧ 函数调用;⑨ 表达式求值

标签:peek,场景,Java,arrQue,中栈,System,println,linkedQue,push
From: https://www.cnblogs.com/fxy0715/p/17378226.html

相关文章

  • 【java】javamail+freemarker生成邮件模板,并发送邮件
    一、前言      在上一篇博客中小编向大家介绍了发送带附件的邮件,实践一下也是不错的。这一篇博客是为下一篇博客进行铺垫的,因为项目中需要一个推送的功能,要把推送的信息灵活的显示到一个固有的模板上。所以为了达到这个目的,小编就引入了freemarker。下面向大家介绍。二、What......
  • 【微信】Java 微信扫码支付(模式二)
    一、前言      今天是一个有意义的日子,八月十五中秋节。      在这个这么有意义的日子里,小编写下这篇博客,自己的记忆肯定非常深,哈哈哈,先自嘲一下。      记得小编的前一篇关于微信的博客中提到了,微信是一种生活方式,有九亿人在使用。中国各个地区都已经使用上了微......
  • java根据IP获取城市代码
    关键字:java根据IP获取城市代码附件是一个java工程,其中qqwry0910.rar是腾讯的软件,它可以时时更新你的QQWry.dat,而QQWry.dat是一个IP数据库,我们通过java可以直接根据IP获取城市及网络(如:北京市|联通),为了让数据库永远是最新的,可以通过qqwry0910.rar来在线升级,......
  • 怎么准备Java面试(一):全局把控
    一、前言最近小编换工作,也要开始准备一下面试。小编作为一个Java开发,也是从初级——>中级——>高级——>资深。一步一步走过来的,基本面试过程中,内容是大致是一样的。下面我将从这几个分支中来依次铺展开:二、聊一聊面试大部分公司会有:一面基础面试or算法;二面项目组长深入面试......
  • (转)Java中的String、StringBuilder和StringBuffer
    1、StringString对象是不可变的,即一旦一个String对象被创建以后,包含在这个对象中的字符序列是不可改变的,直至这个对象被销毁。那么我们new一个String对象,比如Stringa=newString("A")Stringa2=newString("A")和直接创建一个字符串,比如Stringb="A"这两种方......
  • 如何理解理解Java对象与引用?
    一、关于对象与引用之间的一些基本概念  为便于说明,先定义一个类:classVehicle{intpassengers;intfuelcap;intmpg;}有了这个类,就可以用它来创建对象: Vehicleveh1=newVehicle() ,通常把这条语句的动作称之为创建一个对象,其实,它包含了四个动作:newVehicleVehicleveh1= ......
  • JavaScript封装大全
    JavaScript封装大全-持续更新Ajax封装//使用该封装需注意//Ajax(method(默认GET),url(网址必传),success(res){(成功时数据处理函数必传)},error(res)(失败时数据处理函数),data(网址中qurey部分用对象形式存储默认为空))//使用ES6语法classAjax{//解构传......
  • 掌握C++中static关键字的多种使用场景
    static是什么在最开始C中引入了static关键字可以用于修饰变量和函数,后来由于C++引入了class的概念,现在static可以修饰的对象分为以下5种:成员变量,成员函数,普通函数,局部变量,全局变量static的作用修饰成员变量static修饰成员变量之后,该变量会属于该类,而不是某一个该类的对象。......
  • k10_java数据类型
    数据类型强类型语言java是强类型语言要求变量的使用过要严格符合规定,所有的变量需要先定义后才能使用。弱类型语言就是类型定义不太严格,变量名可以不可以直接使用,或者直接定义个变量名,不用声明其类型java数据类型分类————Java的数据类型分为两类基本数......
  • 28基于java的简单酒店数据管理
    本文章介绍一个基于java的简单酒店数据管理系统项目介绍该项目适用于初学java后,需要一个小练手的javaweb项目,该项目是只有一个酒店数据表,然后实现对该酒店增加,修改,删除和分页查询的小案例,虽然项目不是很复杂,但麻雀虽小但五脏俱全,适合于个人学习适用。项目使用的技术架构后......