【问题标题】:Data structure for linked list链表的数据结构
【发布时间】:2019-02-21 23:56:08
【问题描述】:

保持可排序和可搜索的项目列表的最佳方法是什么?我想要一个我想要保持顺序的药物适应症列表,如下所示:

药物---------适应症

赖诺普利------高血压

苯磺酸氨氯地平---------高血压

苯磺酸氨氯地平 --------- 冠状动脉疾病 (cad)

卡维地洛------高血压

环丙沙星------皮肤和皮肤结构感染

环丙沙星------骨关节感染

无论什么顺序,苯磺酸氨氯地平都必须匹配高血压。我需要能够按字母顺序排序。然后我需要能够获得子集。所以我需要能够提取环丙沙星和赖诺普利的适应症,然后搜索高血压是否在结果列表中。

我该怎么做?我目前将它作为两个单独的哈希集。

【问题讨论】:

  • 链表是一种糟糕的数据结构,用于高效搜索和保持排序,还有更好的选择。
  • @ÓscarLópez OP 写的是 sortable 而不是 sorted。另外,如果我理解正确的话,他们需要存储一个映射药物->适应症。
  • @Kartik 比一直排序的东西更可排序吗? :p 另外,我认为我们对这个问题的解释不同。在我的理解中,他使用两个标准进行排序:med、indication。我希望 OP 澄清这一点,这很令人困惑,因为他谈论列表但使用的是哈希集。

标签: java list data-structures


【解决方案1】:

虽然它是一个树而不是一个列表,但TreeSet 满足被排序的要求,高效的O(log(n)) 可搜索并且你可以从中得到subsets。声明为SortedSet会更好。

【讨论】:

  • OP 已经在使用散列集了,所以我假设他没有 dups 没问题。我们甚至不知道他为什么在使用套装时提到列表。
【解决方案2】:

尝试使用 TreeMap

  • 按排序(升序)顺序存储键值对。
  • 您可以使用键访问值
  • 键可以是“药物”
  • 值可以是“指示”

【讨论】:

    【解决方案3】:

    TreeSet 是一组排序好的项目:

    基于 TreeMap 的 NavigableSet 实现。元素是 使用它们的自然顺序排序,或由提供的比较器排序 设置创建时间,取决于使用的构造函数。

    对于搜索、过滤、映射、子集创建等。我建议使用 Java Stream API。

    【讨论】:

      【解决方案4】:

      SortedSet 接口提供了保持元素排序的功能。 NavigableSet 界面提供了在 SortedSet 中导航的功能。

      由于TreeSet 类实现了NavigableSet 接口,它同时具有NavigableSet 和SortedSet 的功能。 TreeSet 使用自平衡二叉搜索树,更具体地说是红黑树。

      contains() 方法用于检查给定元素是否存在于给定的 TreeSet 中。如果找到该元素,则返回 true,否则返回 false。

      【讨论】:

        【解决方案5】:

        Use B+ tree. 它是默认排序且高效的搜索。

        然而,插入可能需要循环来保持平衡。

        【讨论】:

          【解决方案6】:

          谢谢大家!在对每个建议进行了一些实验之后,我能够确定 TreeMap 确实是最好的解决方案。由于 treeMap 包含 Key-Value 对,因此两个映射中的 Key 都用作维护关系的“链接”。只要确保如果您从一个地图中添加或删除一个项目,您必须对另一个地图中的相应键执行相同的操作。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-11-26
            • 2017-01-10
            • 1970-01-01
            • 2023-03-23
            • 2016-08-23
            相关资源
            最近更新 更多