peek()返回null,element()抛nosuchelementexception;二者均为非破坏性查询,区别在于空队列时的容错策略:peek()安全试探,element()强制校验。

当 LinkedList 用作 Queue(比如通过 Queue<integer> queue = new LinkedList();</integer>)时,peek() 和 element() 在空队列下的行为不同:前者返回 null,后者抛出 NoSuchElementException。
peek():安全查看,空时返回 null
peek() 是“非破坏性”查询操作,只看队首元素不移除。队列为空时,它不报错,而是直接返回 null。适合需要先判断再处理的场景。
- 调用
queue.peek()→ 返回null(不会抛异常) - 常用于条件检查:
if (queue.peek() != null) { ... } - 对 null 值敏感的业务需注意:若队列本身允许存
null,就无法靠peek()区分“空队列”和“队首为 null”
element():强语义获取,空时强制失败
element() 表达的是“我确信队列非空,我要取队首”,因此设计上要求必须存在元素。空时立即抛出 NoSuchElementException。
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
- 调用
queue.element()→ 抛NoSuchElementException - 适合已知队列非空的上下文,或希望快速暴露逻辑错误(比如本该有数据却没了)
- 不能用于试探性访问;想用它,得先确保 size > 0 或配合 try-catch
底层实现来源
这两个方法都来自 Queue 接口,LinkedList 作为实现类,复用了其父类 AbstractQueue 的默认行为:
-
peek()在AbstractQueue中直接返回null(空队列时) -
element()默认调用peek(),若结果为null就抛异常 - 所以二者差异不是 LinkedList 特有,而是整个 Queue 规范的设计约定
对比 poll() 和 remove()
类似地,poll()(取并删,空时返 null)与 remove()(取并删,空时抛异常)也遵循同一模式,形成对称设计:
-
peek()/poll()→ 安全,返回null -
element()/remove()→ 严格,失败即异常 - 这种命名+行为组合是 Java 集合框架中典型的“宽松 vs 严格”接口风格
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










