Java栈Stack的使用

简介: Java栈Stack的使用

简介:栈是在现实工程项目中和算法比赛中最常用的数据结构之一,Java内置Stack数据结构,本文旨在用最简洁和快速的方式教会大家使用Stack。

从一个题目入手

/*这是一个模拟模拟栈的题目*/
import java.util.*;
import java.io.*;
public class Main
{
    public static void main(String [] args) throws Exception
    {
        Stack<Integer>stack = new Stack<Integer>();
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(reader.readLine());
        while (n -- > 0)
        {
            String [] strs = reader.readLine().split(" ");
            if (strs[0].equals("push"))
            {
                int x = Integer.parseInt(strs[1]);
                // System.out.println("push");
                stack.push(x);
            }
            else if (strs[0].equals("pop"))
            {
                // System.out.println("pop");
                stack.pop();
            }
            else if (strs[0].equals("query")) 
            {
                // System.out.println("query");
                System.out.println(stack.peek());
            }
            else 
            {
                // System.out.println("empty");
                if (stack.empty()) System.out.println("YES");
                else System.out.println("NO");
            }
        }
    }
}

声明方式

Stack<Integer>stack = new Stack<Integer>();  

常用方法

stack.push(x); // 往栈顶存放一个元素
stack.peek(); // 获取栈顶元素 但不把栈顶元素去掉
stack.pop(); // 把栈顶元素出栈 并且返回这个元素 这个是和c++的pop的区别 c++的不可以返回栈顶元素
stack.size(); // 获取栈的大小 这个和c++的一样 其他的STL容器获取大小也是这个
stack.isEmpty(); // 判断栈是否为空 返回boolean值 其他的容器也一般用这个方法
stack.search();   // 返回一个对象在此堆栈上的基于1的位置 意思是把栈顶的index作为1 让依次往下递增 以第一个出现的位置为准
import java.util.*;
public class Main{  
  public static void main(String[] args) {
    Stack<Integer> stack = new Stack<Integer>();
    stack.push(1);
    stack.push(2);
    stack.push(3);
    stack.push(4);
    stack.push(5);
    stack.push(5);
    System.out.println("4:" + stack.search(4));
    System.out.println("5:" + stack.search(5)); // 5处于栈顶位置
  }
}
运行结果:
4:3
5:1

遍历方式

import java.util.*;
public class Main{  
  public static void main(String[] args) {
    Stack<Integer> stack = new Stack<Integer>();
    stack.push(1);
    stack.push(2);
    stack.push(3);
    stack.push(4);
    stack.push(5);
    /*通过Iterator方式遍历*/
    Iterator<Integer> it = stack.iterator();
    while(it.hasNext())
    {
      System.out.print(it.next() + " ");
    }
    System.out.println();
    /*通过for-each循环遍历*/
    for(Integer it1:stack)
    {
      System.out.printf(it1  + " ");
    }
    System.out.println();
    /*通过for遍历*/
    for (int i = 0; i < stack.size(); ++ i)
    {
      System.out.print(stack.get(i) + " ");
    }
    /*
     运行结果都是
     1 2 3 4 5
     */
  }
}

注意事项

如果栈为空的话 使用pop()方法或者peek()方法会报错

相关文章
|
3月前
|
存储 算法 Java
惊!Java程序员必看:JVM调优揭秘,堆溢出、栈溢出如何巧妙化解?
【8月更文挑战第29天】在Java领域,JVM是代码运行的基础,但需适当调优以发挥最佳性能。本文探讨了JVM中常见的堆溢出和栈溢出问题及其解决方法。堆溢出发生在堆空间不足时,可通过增加堆空间、优化代码及释放对象解决;栈溢出则因递归调用过深或线程过多引起,调整栈大小、优化算法和使用线程池可有效应对。通过合理配置和调优JVM,可确保Java应用稳定高效运行。
140 4
|
27天前
|
存储 算法 Java
🧠Java零基础 - Java栈(Stack)详解
【10月更文挑战第17天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
19 2
|
1月前
|
存储 安全 Java
【用Java学习数据结构系列】探索栈和队列的无尽秘密
【用Java学习数据结构系列】探索栈和队列的无尽秘密
31 2
|
3月前
|
Java 索引
java中的栈(利用数组实现栈)
这篇文章通过Java代码示例介绍了如何使用数组实现栈操作,包括栈的初始化、入栈、出栈、判断栈满和空以及遍历栈的方法。
java中的栈(利用数组实现栈)
|
4月前
|
Java 运维
开发与运维命令问题之使用jstack命令查看Java进程的线程栈如何解决
开发与运维命令问题之使用jstack命令查看Java进程的线程栈如何解决
66 2
|
4月前
|
存储 安全 Java
Java面试题:在JVM中,堆和栈有什么区别?请详细解释说明,要深入到底层知识
Java面试题:在JVM中,堆和栈有什么区别?请详细解释说明,要深入到底层知识
89 3
|
4月前
|
存储 缓存 监控
Java面试题:解释堆和栈的OutOfMemoryError通常在什么情况下会发生
Java面试题:解释堆和栈的OutOfMemoryError通常在什么情况下会发生
49 3
|
4月前
|
存储 Java 对象存储
Java虚拟机(JVM)中的栈(Stack)和堆(Heap)
在Java虚拟机(JVM)中,栈(Stack)和堆(Heap)是存储数据的两个关键区域。它们在内存管理中扮演着非常重要的角色,但各自的用途和特点有所不同。
53 0
|
4月前
|
存储 Java
JAVA程序运行问题之JVM 中的栈如何解决
JAVA程序运行问题之JVM 中的栈如何解决
|
4月前
|
存储 安全 Java
Java集合篇之逐渐被遗忘的Stack,手写一个栈你会吗?
总之,虽然在日常开发中,`java.util.Stack`正逐渐被其他类如 `Deque`接口的实现所取代,但手写一个栈(无论是基于数组还是链表)都是一次很好的编程练习,它可以帮助开发者更加深入地理解栈这种数据结构的工作原理和各种操作。
39 0
下一篇
无影云桌面