You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

栈中peek()函数与top()函数的区别是什么?

栈结构中peek()与top()的核心差异

二者最核心的共性是返回栈顶元素且不会将元素弹出栈,你没有感知到差异是因为大部分通用场景下二者的功能高度重叠,区别主要体现在所属语言/标准库、边界处理逻辑两个维度:

  • 所属生态的命名习惯差异
    不同技术栈对栈顶查询方法的命名规范不一样:

    C++ STL的std::stack只提供top()作为栈顶查询接口,没有原生的peek()方法
    Java的Stack类、Python的queue.LifoQueue类、多数Go语言的第三方栈实现优先使用peek()作为栈顶查询接口,部分框架会同时提供两个名称的方法做向下兼容,这种场景下二者功能完全一致

  • 空栈调用的边界行为差异
    部分同时提供两个方法的技术栈中,二者的空栈处理逻辑是最核心的区别:
    • 这类实现里top()在栈为空时调用会直接抛出异常,甚至触发未定义行为(比如C++std::stack空栈调用top()属于典型UB,大概率直接导致程序崩溃)
    • 同生态下的peek()空栈调用时一般会返回null/None这类空标识值,不会直接中断程序运行

常见的两种方法的实现逻辑参考:

// top() 空栈抛出异常
public E top() {
  if (isEmpty()) throw new EmptyStackException();
  return elements[size - 1];
}

// peek() 空栈返回空值
public E peek() {
  if (isEmpty()) return null;
  return elements[size - 1];
}

如果你的开发环境同时提供两个方法,优先核对对应库的实现文档确认边界逻辑即可,仅提供单个方法的场景下二者没有本质区别。

内容的提问来源于stack exchange,提问作者Nikhil Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 20:57:02