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

标题:Java堆栈类使用实例

堆栈概述

堆栈(Stack)是一种特殊的线性数据结构,它只允许在一端进行插入和删除操作。堆栈遵循先进后出(Last-In-First-Out)的原则,即最后插入的元素最先删除。

Java中提供了Stack类来实现堆栈,Stack类继承了Vector类,并添加了支持堆栈的方法。

Stack类的常用方法

Stack类提供了以下常用方法:

  • push(Object item):将元素压入堆栈顶部。
  • peek():查看堆栈顶部的对象,但不从堆栈中移除它。
  • pop():移除堆栈顶部的对象,并作为此函数的值返回该对象。
  • empty():测试堆栈是否为空。
  • search(Object o):返回对象在堆栈中的位置(以1为基数)。如果对象不在堆栈中,则返回 -1。

使用实例

示例一

我们通过以下代码来展示如何使用Stack类:

import java.util.Stack;

public class StackDemo {
    public static void main(String[] args) {
        // 创建一个堆栈对象
        Stack<String> stack = new Stack<String>();

        // 将元素压入堆栈顶部
        stack.push("A");
        stack.push("B");
        stack.push("C");

        // 查看堆栈顶部的对象,但不从堆栈中移除它
        System.out.println("堆栈顶部的对象是:" + stack.peek());

        // 移除堆栈顶部的对象,并作为此函数的值返回该对象
        String top = stack.pop();

        // 输出弹出的对象
        System.out.println("弹出的对象是:" + top);

        // 测试堆栈是否为空
        System.out.println("堆栈是否为空:" + stack.empty());

        // 搜索指定元素在堆栈中的位置,并输出
        int index = stack.search("B");
        System.out.println("元素B在堆栈中的位置是:" + index);
    }
}

输出结果:

堆栈顶部的对象是:C
弹出的对象是:C
堆栈是否为空:false
元素B在堆栈中的位置是:2

示例二

我们可以利用Stack类实现括号匹配的功能,代码如下:

import java.util.Stack;

public class BracketMatching {
    public static boolean isMatched(String s) {
        Stack<Character> stack = new Stack<Character>();

        // 遍历字符串
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);

            // 左括号入栈
            if (c == '(' || c == '[' || c == '{') {
                stack.push(c);
            }

            // 右括号出栈匹配
            if (c == ')' || c == ']' || c == '}') {
                // 如果栈为空则直接返回false
                if (stack.isEmpty()) {
                    return false;
                }

                char top = stack.pop();
                if (c == ')' && top != '(') {
                    return false;
                }
                if (c == ']' && top != '[') {
                    return false;
                }
                if (c == '}' && top != '{') {
                    return false;
                }
            }
        }

        // 如果栈不为空则返回false
        if (!stack.isEmpty()) {
            return false;
        }

        return true;
    }

    public static void main(String[] args) {
        String input = "()[]{}";
        boolean result = isMatched(input);

        if (result) {
            System.out.println("括号匹配成功");
        } else {
            System.out.println("括号匹配失败");
        }
    }
}

输出结果:

括号匹配成功

总结

通过以上两个示例说明,我们可以看出Stack类的强大之处,它可以轻松地实现各种堆栈相关的功能,如括号匹配等。在使用Stack类时要注意空栈的情况及元素类型的统一性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java堆栈类使用实例(java中stack的使用方法) - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • Springboot引入hibernate配置自动建表并进行增删改查操作

    下面是详细的步骤: 1. 添加依赖 在pom.xml文件中添加以下依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> &l…

    Java 2023年5月19日
    00
  • jsp+servlet+jdbc实现对数据库的增删改查

    首先,我们需要明确一下技术栈的概念: JSP (Java Server Pages):基于Java语言的服务器端网页开发技术; Servlet:是Java Web应用程序的核心,位于服务端,负责处理浏览器发送过来的HTTP请求并返回响应结果; JDBC (Java Database Connectivity):Java数据库连接,Java语言操作关系型数据库…

    Java 2023年5月20日
    00
  • Java 队列实现原理及简单实现代码

    下面就详细讲解“Java队列实现原理及简单实现代码”的完整攻略。 队列基本概念 在讲解队列的实现原理和代码之前,先了解一下队列的基本概念: 队列(Queue)是一种先进先出(FIFO,First In First Out)的数据结构。它可以用链表或数组来实现。队列在计算机中广泛应用,例如在操作系统、网络通信、数据库系统等方面经常被使用。 在队列中,新的元素插…

    Java 2023年5月18日
    00
  • Java源码刨析之ArrayDeque

    Java源码刨析之ArrayDeque Java中的ArrayDeque是一种基于动态数组的双端队列数据结构。本篇文章将与读者一起深入分析Java中ArrayDeque的源代码,从中学习这种数据结构的实现原理。 容量扩充 由于使用动态数组来存储队列中的元素,因此在添加元素时,需要判断是否需要扩展数组的容量。容量扩充的代码实现如下: private void …

    Java 2023年5月26日
    00
  • Mybatis执行流程、缓存原理及相关面试题汇总

    下面我会详细讲解Mybatis执行流程、缓存原理及相关面试题汇总。 Mybatis执行流程 Mybatis的执行流程大致可以分为以下几个步骤: 解析SqlMapConfig.xml文件,创建Configuration对象; 解析映射文件,创建MappedStatement对象; 创建SqlSessionFactory对象; 创建SqlSession对象; 使…

    Java 2023年5月20日
    00
  • Java基于ShardingSphere实现分库分表的实例详解

    Java基于ShardingSphere实现分库分表的实例详解 ShardingSphere是一款开源的分布式数据库中间件,支持对MySQL、Oracle、SQLServer等关系型数据库进行分库分表。本文将详细讲解在Java项目中如何基于ShardingSphere实现分库分表的方法。 步骤一:引入依赖 在Java项目的pom.xml文件中引入Shardi…

    Java 2023年5月20日
    00
  • Java学习之线程同步与线程间通信详解

    Java学习之线程同步与线程间通信详解 为什么需要线程同步和线程间通信 在多线程编程中,由于多个线程可能同时执行同一任务,可能会导致竞态条件(Race Condition)的出现,即数据被多个线程同时修改,从而导致程序运行出错。为了避免这种情况,需要通过线程同步机制来协调多个线程的共同操作。 而线程间通信则是线程同步机制的一种实现方式,它可以让线程之间传递消…

    Java 2023年5月18日
    00
  • Java中使用MyBatis-Plus操作数据库的实例

    下面我将详细讲解Java中使用MyBatis-Plus操作数据库的实例的完整攻略。 一、什么是MyBatis-Plus MyBatis-Plus是MyBatis的增强工具包,简化了MyBatis的使用。MyBatis-Plus提供了许多常用的功能,如分页、逻辑删除、条件构造器等。在使用MyBatis-Plus时,我们可以更加便捷和高效地操作数据库。 二、在J…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部