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

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

  1. add(E e):将指定的元素附加到此列表的末尾。
  2. addLast(E e):将指定的元素附加到此列表的末尾。
  3. offer(E e):添加指定元素作为此列表的尾部(最后一个元素)。

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

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

回答

LinkedList 实现了几个接口:

  • add来自ListQueue接口,它来自Collection;
  • offer来自Queue接口,与add方法的不同之处在于它在失败时所做的事情(在 Javadoc 中的表格中进行了描述);
  • addLast来自Deque界面。Deque也是 a Collectionadd方法也是如此;也许addLast是为了清晰和对称的addFirst方法,所以你不会对add添加到哪一端有任何疑问。如 Javadoc 中所述,Deque.addLastQueue.add是等效的。

在您应该选择哪个方面:几乎取决于您,因为它们做同样的事情(给予或接受返回类型)。


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

在 Twitter 上有一个帖子,其中的作者 Josh Blochjava.util.LinkedList质疑它是否真的有用。他建议您最好使用ArrayListArrayDeque,具体取决于您需要它做什么。

  • `add` should come originally from `Collection`... `Queue` also has `add`

以上是LinkedList这三个非常相似的方法背后的目的是什么?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>