【问题标题】:Java LinkedList - differences between retrieve operationsJava LinkedList - 检索操作之间的差异
【发布时间】:2013-01-28 20:53:00
【问题描述】:

LinkedList中以下每组元素检索操作的不同方法之间有什么区别吗?

返回 null + 删除操作: poll()pollFirst()

返回 null + 不删除操作: peek()peekFirst()

抛出异常 + 删除操作: pop()remove()removeFirst()

抛出异常 + 不删除操作: element(), getFirst()

插入方法中存在类似的重复。

如果没有这样的区别,我希望在方法的 javadoc 中提到它(类似于古老的“这就像调用 ...”)。它只是一个草率的文档,还是我遗漏了什么?

【问题讨论】:

  • 我不明白你在问什么。 javadoc不是很清楚吗。它非常清楚地说明了每种方法的作用。有什么问题?
  • 如果有重复,那是因为LinkedList实现了多个基础接口(@98​​7654332@、ListQueue等)
  • @JBNizet - javadoc 很清楚,但重复仍然存在。 @OliCharlesworth - 大多数重复都在 Deque 内,这意味着我应该提出关于 Deque 本身的问题。

标签: java linked-list duplicates javadoc


【解决方案1】:

它们之间的区别在于它们发布的版本和 LinkedList 实现的接口。

基于poll()pollFirst() 的示例:

LinkedListJava 1.2 一起发布。

从1.5开始 LinkedList实现了Queue接口,有

public E poll() 

从 1.6 开始 LinkedList 实现了 Deque 接口,它有

public E pollFirst()

编辑: 由于向后兼容,保留旧的实现很重要。

【讨论】:

  • 谢谢,这可能是对的。唯一的例外是 removeFirst() 和 pop() 对,其中 javadoc 确实说“此方法等效于 removeFirst()”。
  • 向后兼容不是原因。原因是LinkedList实现了多个接口。
  • @Elist。请注意,答案中的原因不正确。只是 FYK
  • @miller.bartek。这不是由于向后兼容性。只是 Deque 是在 Java 6 中添加的,而在 Java 5 中没有。所以,LinkedList 没有实现Deque,因此没有那个方法。但是,现在,它实现了这两个接口。
  • @miller。所以这些方法本身并不是 LinkedList 的一部分,而是派生自它实现的 iterfaces。
【解决方案2】:

它们之间没有区别,文档中也列出了,但是您必须进行一些递归搜索才能到达那里。

LinkedList 实现了两个接口 - QueueDeque。而Deque 扩展自Queue

现在,Deque 定义了方法 - Deque#pollFirst() 并继承了方法 - Queue#poll()

所以,LinkedList 基本上为它实现的两个接口定义了这两个方法。

关于这两种方法的相似之处,在Deque的文档中列出为:

此接口扩展了 Queue 接口。当双端队列用作 队列,FIFO(先进先出)行为结果。添加元素 在双端队列的末尾并从一开始就被删除。方法 继承自 Queue 接口,正好等价于 Deque 方法如下表所示:

还有一个表格列出了Queue 类的方法和等效的Deque 方法。请参阅Deque#poll()Deque#peek(),例如他们清楚地列出了等效的方法。

【讨论】:

    【解决方案3】:

    你的权利是糟糕的文档或其他东西。

    偷看() 检索但不删除此列表的头部(第一个元素)。

    peekFirst() 检索但不删除此列表的第一个元素,如果此列表为空,则返回 null。

    这就是它所说的,我在我的 Java 书中读到,头部是列表中的第一项。

    【讨论】:

      猜你喜欢
      • 2012-05-26
      • 1970-01-01
      • 2016-03-17
      • 2011-06-17
      • 2018-01-04
      • 2011-01-24
      • 1970-01-01
      • 2019-06-15
      • 2014-02-06
      相关资源
      最近更新 更多