首页 > 解决方案 > 以连续整数作为键的 HashMap 与 ArrayList

问题描述

我偶然发现了一些HashMap<Integer,HashMap<Integer, String>>用于存储通常具有 >100.000 行和 10 列的大型 Excel 表的代码。列和行都是连续的整数。我肯定会使用类似 a 的东西ArrayList<ArrayList<String>>

那么使用HashMap. 您是否看到任何严重的性能问题(无论是内存还是运行时)?

标签: javaperformancearraylisthashmap

解决方案


我觉得不得不提供一个答案,但应该归功于@Kayaman,他看到了显而易见的并首先发表了评论。

在一般情况下,您正在寻找的显着潜在优势是速度、灵活性和节省空间

假设您有一个 3x3 范围的 9 个单元格,左上角位于单元格 A1,然后在 ZZ49 处添加一个新单元格。对于使用内存线性分配的任何数据结构,您突然需要将内存增长几个数量级(约 30,000 个新的空单元),可能(取决于数据结构)重新排列已存储的单元并初始化大量永不- 被使用的空值(语言/库实现将具有不同的实现细节,但类似的浪费缺点)。

Excel 本身会保持数组/数组列表的大小以覆盖每个工作表/范围中的每个单元格吗?不太可能。在您的示例中,单元格范围可能不会稀疏填充,但原则上和一般情况下,电子表格中包含数据的单元格数量是允许的最大矩形区域的一小部分。因此,哈希映射(或“多维哈希映射”)在解决此类映射到 Excel 问题的一般方法中并不是不合理的数据结构选择,尽管您可能有充分的理由在您的特定应用程序中做出不同的选择。


推荐阅读