【问题标题】:What is the purpose behind these three very similar methods of a LinkedList? [duplicate]这三个非常相似的 LinkedList 方法背后的目的是什么? [复制]
【发布时间】:2021-05-06 13:27:15
【问题描述】:

我正在查看LinkedList 的Java 8 文档,我发现有几种方法似乎可以做同样的事情。例如:

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

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

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

【问题讨论】:

    标签: java list linked-list


    【解决方案1】:

    LinkedList 实现了几个接口:

    • add 来自ListQueue 接口,它们从Collection 获取;
    • offer 来自Queue 接口,与add 方法在失败时的作用不同(描述为in a table in the Javadoc);
    • addLast 来自Deque 接口。 Deque 也是 Collectionadd 方法也是如此;也许addLast 是为了与addFirst 方法的清晰和对称而存在的,所以你不会对add 添加到哪一端有任何疑问。 As described in the JavadocDeque.addLastQueue.add 是等价的。

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


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

    有一个thread on Twitter java.util.LinkedList 的作者 Josh Bloch 质疑它是否真的有用。他建议您最好使用ArrayListArrayDeque,具体取决于您需要它做什么。

    【讨论】:

    • add应该来自Collection...Queue也有add
    猜你喜欢
    • 2011-04-19
    • 1970-01-01
    • 2017-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多