gpt4 book ai didi

java - 有序表数据结构

转载 作者:行者123 更新时间:2023-11-30 08:13:00 24 4
gpt4 key购买 nike

我的数据以表格形式组织

+------+------+------+------+
| | Col1 | Col2 | Col3 |
+------+------+------+------+
| Row1 | 1 | 2 | 3 |
| Row2 | 5 | 5 | 6 |
| Row3 | 9 | 2 | 7 |
+------+------+------+------+

我正在寻找一种允许以下内容的数据结构:

  • 列和行的快速迭代(获取列或行的值。(在一个方向上迭代的代价不应比在另一个方向上的代价高)
  • 快速添加和删除整个行和列(同样,这两个操作应该同样快并且最多应该是 O(n) )
  • 根据广告订单进行排序,并且可以重新排序。顺序将使用一些比较器计算,通常取决于行或列中的数据,但不取决于任何名称等
  • 存储数字以外的数据(我们有混合数据,但无论如何我打算为实际数据使用容器类)

此外,行和列将具有元数据(名称、颜色和类似的东西)。所有这些操作在我们的系统中经常发生。当前,我们基于行存储数据,列没有引用与其相关的数据。这使得删除列或迭代其数据变得非常乏味。

我首先想到的是 Guava Table但这不是有序的,我不确定删除整行或整列是否容易,尽管清除行或列映射可能会做到这一点。

由于需要添加和删除,作为后备存储的数组将无法工作。 (虽然我可以预测表的大小并为删除创建新表,但我不喜欢该解决方案,即使它可以对用户隐藏)

对于如何实现这种数据结构的任何想法,我将不胜感激。

需要说明的是,我不需要完成此操作的库,但我正在寻找可以让我创建它的数据结构。例如,我已经知道我将在单独的列表中存储行和列元数据

最佳答案

当然可以对 Guava Table 进行排序。 ImmutableTable提供“可靠的用户指定的迭代顺序”和(来自 Builder 文档)“默认情况下,将单元格添加到构建器的顺序决定了返回表中所有 View 的迭代顺序”。

TreeBasedTable如果你需要一个可变的 Table 并且想要一个 RowSortedTable 可以使用.

您还可以很容易地实现自己的 LinkedHashBasedTable 类。使用 ForwardingTable和一个 LinkedHashSet 来存储您想要的迭代顺序,或者简单地调用 Tables.newCustomTable()LinkedHashMap 作为第一个参数(以及 Supplier 的结果,如果需要的话)。


大多数 Table 实现为所有标准方法和返回 View 的方法(如 row()colum()) 直接由原始 Table 支持,因此它们的效率相似。

如果您真的担心所有可用的 Table 实现(包括 .newCustomTable())都太慢,您应该对其进行基准测试。它们对于所有正常使用来说已经足够高效了,并且没有证据表明 Table 是您的瓶颈创建您自己的数据结构是 premature optimization 的一个明显实例.

关于java - 有序表数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30192917/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com