Java如何快速获取栈顶元素?

在Java中,使用Stack类时通过peek()方法获取栈顶元素(不删除),若栈空则抛出EmptyStackException;推荐用Deque实现(如ArrayDeque),同样用peek()获取,栈空时返回null

使用 java.util.Stack 类(传统方式)

Stack 类提供了两种获取栈顶元素的方法:

Java如何快速获取栈顶元素?

  1. peek()
    返回栈顶元素但不移除它,若栈为空,抛出 EmptyStackException
  2. pop()
    返回栈顶元素并移除它,栈空时同样抛出异常。

示例代码:

import java.util.Stack;
public class StackExample {
    public static void main(String[] args) {
        Stack<String> stack = new Stack<>();
        stack.push("Apple");
        stack.push("Banana");
        // 获取栈顶元素不移除
        String topElement = stack.peek(); // 返回 "Banana"
        System.out.println("栈顶元素: " + topElement); 
        // 获取并移除栈顶元素
        String removedElement = stack.pop(); // 返回 "Banana"
        System.out.println("移除的元素: " + removedElement);
    }
}

使用 Deque 接口(推荐方式)

Java 官方推荐用 Deque(双端队列)替代 Stack 类,因其性能更好且更灵活,常用实现类为 ArrayDeque

  • peek():查看栈顶元素(不移除)。
  • pop():移除并返回栈顶元素(栈空时抛出 NoSuchElementException)。

示例代码:

Java如何快速获取栈顶元素?

import java.util.ArrayDeque;
import java.util.Deque;
public class DequeExample {
    public static void main(String[] args) {
        Deque<String> stack = new ArrayDeque<>();
        stack.push("Apple");
        stack.push("Banana");
        // 获取栈顶元素
        String topElement = stack.peek(); // 返回 "Banana"
        System.out.println("栈顶元素: " + topElement);
        // 移除栈顶元素
        String removedElement = stack.pop(); // 返回 "Banana"
        System.out.println("移除的元素: " + removedElement);
    }
}

关键注意事项

  1. 空栈处理
    调用 peek()pop() 前需检查栈是否为空:

    if (!stack.isEmpty()) {
        String element = stack.peek(); // 安全操作
    } else {
        System.out.println("栈为空!");
    }
  2. 异常类型

    • Stack 类:空栈时抛出 EmptyStackException
    • Deque 实现:空栈时抛出 NoSuchElementExceptionpop())或返回 nullpeek())。
  3. 性能对比
    | 操作 | Stack 类 | ArrayDeque |
    |————|————|————–|
    | peek() | O(1) | O(1) |
    | pop() | O(1) | O(1) |
    | 线程安全 | 是(同步) | 否(更快) |

    Java如何快速获取栈顶元素?

    • 推荐 ArrayDeque:非线程场景下性能更优,且符合现代Java标准。

  • 基础场景:使用 stack.peek() 查看栈顶元素,stack.pop() 移除栈顶元素。
  • 最佳实践:优先选择 Deque(如 ArrayDeque)而非 Stack 类,因前者效率更高、API更一致。
  • 健壮性:始终检查栈是否为空以避免运行时异常。

引用说明: 基于 Java 官方文档(Oracle JDK 17),参考了 Stack 类和 Deque 接口的规范,示例代码遵循 Java SE 标准语法,已在 OpenJDK 17 环境下验证。

原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/44457.html

(0)
酷盾叔的头像酷盾叔
上一篇 2025年7月3日 02:54
下一篇 2025年7月3日 02:58

相关推荐

  • java怎么表示不等于

    Java中,不等于用“!=”表示,对于基本数据类型,直接使用“!=”比较;对于对象,若比较引用相等性用“!=”,若比较内容相等性则需结合equals方法,如“!object1.equals(object2)

    2025年7月8日
    000
  • Java如何正确比较值大小?

    Java中比较大小的方法取决于类型:基本类型直接用比较运算符(˃、

    2025年6月4日
    700
  • Java导出的CSV如何打开?

    Java导出的CSV文件本质是纯文本格式,可用任何文本编辑器(如记事本)直接查看,若需表格化处理,可双击用Excel、WPS表格等电子表格软件打开,或导入数据库工具中解析。

    2025年7月7日
    000
  • Java按钮快捷键如何设置?

    在Java中为按钮设置快捷键,可通过setMnemonic()方法实现,button.setMnemonic(KeyEvent.VK_A)将快捷键设为Alt+A,按钮文本需包含对应字符(如”A”),系统会自动添加下划线提示,此方法适用于Swing组件如JButton。

    2025年6月11日
    000
  • Java如何输出星期几?

    在Java中,可通过java.util.Calendar或java.time.LocalDate获取星期几,使用Calendar需结合SimpleDateFormat格式化输出;Java 8及以上推荐LocalDate.getDayOfWeek()直接返回英文星期名,或通过DateTimeFormatter本地化输出。

    2025年6月18日
    100

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN