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

LinkedList中pop()、remove()与poll()的真实差异及疑问

LinkedList中pop()、poll()和remove()的差异详解

你的理解完全正确:remove()确实比pop()多了支持传入索引删除元素的特性,三者的具体差异如下:

1. pop()

  • 属于Deque接口定义的方法,LinkedList因实现了Deque而拥有该方法
  • 功能:仅能删除并返回列表的首元素(LinkedList作为栈使用时,push操作是往头部添加元素,pop对应从头部取出删除)
  • 空列表场景:抛出NoSuchElementException异常
  • 无重载方法,只能操作首元素

2. poll()

  • 同样属于Deque接口定义的方法
  • 功能:删除并返回列表的首元素
  • 空列表场景:返回null,不会抛出异常
  • 无重载方法,只能操作首元素

3. remove()

LinkedList提供了多个重载的remove()方法,核心特性比前两者更丰富:

  • 无参remove():行为和pop()完全一致——删除并返回首元素,列表为空时抛出NoSuchElementException
  • remove(int index):删除指定索引位置的元素,返回被删除的元素;若索引超出列表范围(小于0或大于等于列表长度),会抛出IndexOutOfBoundsException
  • 额外还有remove(Object o):删除列表中第一个匹配指定元素的节点,返回boolean表示是否删除成功

结合你的代码示例解释

你的代码中,push()是往LinkedList的头部添加元素,所以执行完5次push后,列表实际顺序为[5, 4, 3, 2, 1]:

LinkedList<Integer> list = new LinkedList<>();

list.push(1); // 列表:[1]
list.push(2); // 列表:[2, 1]
list.push(3); // 列表:[3, 2, 1]
list.push(4); // 列表:[4, 3, 2, 1]
list.push(5); // 列表:[5, 4, 3, 2, 1]

list.pop(); // 删除首元素5,剩余列表:[4, 3, 2, 1]
// or
list.poll(); // 删除首元素5,剩余列表:[4, 3, 2, 1]
// or
list.remove(3); // 删除索引3的元素2,剩余列表:[5, 4, 3, 1]

关键差异总结

  • pop()和无参remove()功能、异常行为完全一致,但前者来自Deque接口,后者来自List接口
  • poll()和前两者的核心区别是:空列表时返回null而非抛出异常
  • remove()支持按索引、按元素删除的多场景操作,而pop()和poll()仅能操作列表首元素

内容的提问来源于stack exchange,提问作者Karlz-Bandz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 11:05:31