【问题标题】:Dynamic table / matrix data structure for JavaJava的动态表/矩阵数据结构
【发布时间】:2010-02-11 18:45:41
【问题描述】:

我需要一个类表数据结构的 Java 实现,我可以在其中动态插入或删除行和列。我需要非常快速地从任何行或列获取数据,并且在选择行而不是列时没有开销,反之亦然。

有谁知道已经实现了这种数据结构的库?

【问题讨论】:

    标签: java data-structures matrix


    【解决方案1】:

    您也许可以使用 DefaultTableModel。它旨在与 JTable 一起使用,但没有理由不能单独使用它。您需要添加方法来检索整行或整列的数据。

    【讨论】:

    • 我唯一担心的是它使用 Vectors 进行存储,如果您确实每秒访问行和列数千次,这将增加不必要的同步开销。该方法是有效的,只需维护一个列表列表。
    • 它的父级AbstractTableModel 使您可以轻松使用自己的数据结构。您需要编写自己的更新代码,但通知机制已经到位。 java.sun.com/javase/6/docs/api/javax/swing/table/…
    【解决方案2】:

    如果性能很关键,您可以使用 2D 数组,并实现 reallocation algorithm(例如加倍)以便它可以增长。

    【讨论】:

    • 尽管如此。如果第一个提议的解决方案的性能证明不够,就会这样做。
    【解决方案3】:

    来自 Google Guava 库的HashBasedTable 类执行此操作。如果行需要按排序顺序,还有 TreeBasedTable。

    【讨论】:

      【解决方案4】:

      也许是JQL 或 HSQL DB

      【讨论】:

      • JQL 只是用于查询现有数据结构的语法糖。而且我真的怀疑成熟的 SQL 数据库是否是我的解决方案(我需要每秒从该表中选择数千次行/列)。
      • HSQLDB 非常轻量级,我认为至少值得进行性能测试以查看它是否满足您的要求。
      【解决方案5】:

      您可以简单地使用List<List<YourClass>>。或者,更简单的Map<Integer, List<YourClass>> 将行号(第一个参数,整数)映射到一行(第二个参数,YourClass 对象列表,List<YourClass>)...并围绕该集合构建一个 DataModel 类,确保可以通过实现自定义Iterator,遍历每一行中相同数量的元素(即使该行不包含所有元素,仅返回空值或空对象或类似内容)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-21
        • 2018-05-17
        • 2013-02-05
        • 2010-12-15
        • 1970-01-01
        • 1970-01-01
        • 2018-03-07
        • 2021-03-03
        相关资源
        最近更新 更多