LinkedList的这三种非常相似的方法背后的目的是什么



我正在查看LinkedList的Java 8文档,我看到几个方法似乎也在做同样的事情。例如:

  1. 添加(E E(:将指定的元素追加到此列表的末尾
  2. addLast(E E(:将指定的元素追加到此列表的末尾
  3. 报价(E E(:添加指定的元素作为此列表的尾部(最后一个元素(

这三个似乎都在做同样的事情。我看到addoffer都返回布尔值,表示修改是否成功。

add的文档甚至说它与addLast相同,尽管它没有返回任何内容。我想我想知道为什么这么多冗余?我什么时候会选一个而不是另一个?

LinkedList实现了几个接口:

  • add来自ListQueue接口,后者从Collection得到
  • offer来自Queue接口,与add方法的不同之处在于它在失败时的作用(在Javadoc中的表中描述(
  • addLast来自Deque接口。Deque也是Collectionadd方法也是;也许addLast是为了与addFirst方法保持清晰和对称,所以您不会对add添加到哪一端产生任何疑问。正如Javadoc中所描述的,Deque.addLastQueue.add是等效的

你应该选择哪一个:这取决于你,因为他们做的是相同的事情(给予或接受返回类型(。


更大的问题是:为什么LinkedList试图做这么多事情(不是很单一的责任原则,是吗?(;你应该用它吗?

推特上有一个帖子,java.util.LinkedList的作者Josh Bloch质疑它是否真的有用。他建议你最好使用ArrayListArrayDeque,具体取决于你需要它做什么

相关内容

最新更新