【问题标题】:Linked list class from scratch vs Default linked list class?从头开始的链表类与默认链表类?
【发布时间】:2016-09-10 04:39:47
【问题描述】:

作为一名学生,我一直在为项目/作业从头开始编写我的链表数据结构,我想知道在“现实世界”中,开发人员是否必须编写自己的链表 DS 或使用任何已经在 Java 文档中提供了链表对象。在什么情况下哪个更好?

【问题讨论】:

  • 如何定义“更好”?在性能、可维护性或可重用性方面?
  • @4castle 在这些方面是的——效率、可靠性等
  • 在学术环境中,自己编写是有益的,这样您就可以了解数据结构的工作原理。在“现实世界”中,您使用此类数据结构的库。
  • 自 1999 年以来我一直在编写 Java。我不记得曾经编写过自己的集合类(列表、地图等)。除了 Java 附带的集合类之外,我也从未使用过其他集合类(存在其他集合类,Eclipse 集合,我认为一些 Apache,它们正在现实生活中使用)。我已经为二进制搜索和中位数编写了自己的算法,但更多的是因为它很有趣,所以使用内置的算法也一样好。
  • 顺便说一句,我作为一名程序员的错误之一是有一次我使用了java.util.LinkedList。使用ArrayList 会更好。另一种选择是java.util.ArrayDeque(鲜为人知)。

标签: java data-structures linked-list


【解决方案1】:

自定义LinkedList 实现很可能会更有效,因为它允许您根据需要进行优化,但是JDK 的LinkedList 将始终因其可重用性和可维护性优势而更受欢迎:

  1. 没有人需要维护LinkedList 的实施。
  2. 将来对List 接口的任何添加都将自动继承。
  3. 阅读您的代码的开发人员会立即明白发生了什么。
  4. Collections API 有大量有用的实用方法可供使用。
  5. 您的LinkedList 将与许多使用List 的第三方库兼容。

如果您决定创建自定义的List 实现,您可以选择扩展AbstractSequentialList 以获得#2、#4 和可能的#5 的好处。

【讨论】:

    【解决方案2】:

    非常简单的规则:不要重新发明轮子,除非你有充分的理由这样做。

    含义:当你在做“专业”工作时;你总是平衡的

    A) 重用现有组件

    B) 创建自己的解决方案。

    特别是对于任何以“收藏”为导向的东西,几乎没有充分的理由完全重做某事。

    因此,“技术”答案是:对于生产工作,您必须评估这两种替代方案的成本/收益;然后你决定做什么。但特别是对于来自 Java 标准 库的类,您应该更喜欢重用。无论如何,您都依赖于这些库;所以不使用它们是没有意义的。

    并给出一些会考虑的事情:

    A) 从编写自己的组件中获益:避免依赖第三方代码。您也许可以在您的设置中创建完美的作品。 ...

    B) 这样做的成本:当然,随着时间的推移,创建和维护您自己的解决方案的直接成本(尤其是维护通常被严重低估!当然,所有那些“城堡”在他的回答中列出。

    【讨论】:

    • 感谢您的提示。我自己编辑;然后发现其他人同时进行了更改。我通常通过复制和粘贴来解决这个问题;这一次,在错误的地方粘贴了太多;-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-02
    • 1970-01-01
    • 2020-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多