【问题标题】:What is the best data structure to implement a 2D Matrix with String data type?实现具有字符串数据类型的 2D 矩阵的最佳数据结构是什么?
【发布时间】:2016-05-17 05:26:30
【问题描述】:

我有 150 行和 10 列的巨大表格数据,每列都有字符串数据。存储数据后,我还必须遍历以找到特定值。因此,我正在寻找这种情况下在性能、遍历灵活性方面的最佳数据结构的答案。

我想到了Array、ArrayList、Hashmap。

另外,我在 SO 上发现了类似的问题,但他们没有回答我的问题。

编辑:数据是字母和整数的混合。无法排序且包含重复项。

【问题讨论】:

  • 您需要多久遍历一次? 150*10真的没什么大不了,除非你遍历上千次。在这种情况下,您应该更好地指定用例。
  • 你还要描述更多——需要哪些操作?数组最适合遍历。但是你需要搜索吗?添加(扩展限制)?
  • @IngoBürk - 假设在单个程序运行中是 10 次。

标签: java data-structures


【解决方案1】:

对于这样的表大小组合,2D Array[][] + Hashmap 似乎是一个很好的选择。简单有效。

数组包含值并允许以任何顺序遍历表。

HashMap 包含对 <String; TPoint>(数组中的坐标 - Row/Col 对)。

如果您只需要知道表格是否包含某些字符串,则不要在地图中存储坐标。

我认为@krzyk 提出的Guava Table 提供了类似的功能(不知道性能如何)

【讨论】:

    【解决方案2】:

    Guava 有一个Table 结构,看起来你可以使用它,它有containsValue(...) 方法来查找特定值,你也可以遍历它。

    这是Table 的一般explanation

    通常,当您尝试一次索引多个键时,您会得到类似Map<FirstName, Map<LastName, Person>> 的东西,这很难用且难看。 Guava 提供了一种新的集合类型 Table,它支持任何“行”类型和“列”类型的这种用例。

    您很可能对Table 接口的以下实现感兴趣:

    ArrayTable,它要求在构造时指定完整的行和列,但在表密集时由二维数组支持以提高速度和内存效率。 ArrayTable 的工作方式与其他实现有些不同

    【讨论】:

      【解决方案3】:

      在这种情况下,我会使用 String[][] 因为您可以访问复杂度为 O(1) 的元素

      但正如我所说,仅在这种情况下。如果行数或列数是动态修改的,那么我会使用List<List<String>>,更准确地说是ArrayList

      【讨论】:

      • 注意作者还需要to find a particular value
      • 是的,无论哪种方式,他都可以使用数组找到它:array[43][54],使用 arraylist 将是这样的:list.get(43).get(54 )
      • 您正在撰写有关从特定单元格获取值的文章。要查找无序数组是否包含给定字符串,应该遍历 all C*R 单元格
      • 是的,你是对的,但不幸的是我想不出更好的解决方案 atm,但你的解决方案应该比我的更好
      猜你喜欢
      • 2012-06-20
      • 1970-01-01
      • 2015-04-18
      • 2018-07-17
      • 1970-01-01
      • 2012-04-18
      • 1970-01-01
      • 2011-01-21
      • 1970-01-01
      相关资源
      最近更新 更多