具有连续整数作为键的 HashMap 与 ArrayList
HashMap with consecutive Integers as keys vs. ArrayList
我偶然发现了一些使用 HashMap<Integer,HashMap<Integer, String>>
存储大型 Excel table 的代码,通常有 >100.000 行和 10 列。列和行都是连续的整数。我肯定会用 ArrayList<ArrayList<String>>
之类的东西来代替。
那么使用 HashMap
有什么显着的优势吗?您是否发现任何严重的性能问题(包括内存和运行时方面的问题)?
使用 table 中的属性声明一个 Class,例如:
public class anyClass(){
int grossValue;
int netValue;
}
因此您可以将此数据存储在列表中
ArrayList<AnyClass>
我觉得有必要提供一个答案,但功劳应该归功于@Kayaman,他看到了显而易见的内容并首先发表了评论。
您正在寻找的重要潜在优势是速度、灵活性和space-在一般情况下。
假设您有一个 3x3 范围的 9 个单元格,左上角位于单元格 A1 处,然后在 ZZ49 处添加一个新单元格。对于任何使用 线性分配 内存的数据结构,您突然需要将内存增加几个数量级(约 30,000 个新的空单元格),可能(取决于数据结构)重新排列已存储的内存单元格并初始化大量永远不会使用的空值(language/library 实现将具有不同的实现细节,但类似的浪费缺点)。
Excel 本身会保持 arrays/arraylists 大小以覆盖每个 worksheet/range 中的每个单元格吗?不太可能。在您的示例中,单元格范围可能不是稀疏填充,但原则上和一般情况下,电子表格中包含数据的单元格数量是允许的最大矩形区域的一小部分。因此,哈希映射(或“多维哈希映射”)在解决此类映射到 Excel 问题的一般方法中并不是不合理的数据结构选择,尽管您可能有充分的理由在特定应用程序中进行不同的选择.
我偶然发现了一些使用 HashMap<Integer,HashMap<Integer, String>>
存储大型 Excel table 的代码,通常有 >100.000 行和 10 列。列和行都是连续的整数。我肯定会用 ArrayList<ArrayList<String>>
之类的东西来代替。
那么使用 HashMap
有什么显着的优势吗?您是否发现任何严重的性能问题(包括内存和运行时方面的问题)?
使用 table 中的属性声明一个 Class,例如:
public class anyClass(){
int grossValue;
int netValue;
}
因此您可以将此数据存储在列表中
ArrayList<AnyClass>
我觉得有必要提供一个答案,但功劳应该归功于@Kayaman,他看到了显而易见的内容并首先发表了评论。
您正在寻找的重要潜在优势是速度、灵活性和space-在一般情况下。
假设您有一个 3x3 范围的 9 个单元格,左上角位于单元格 A1 处,然后在 ZZ49 处添加一个新单元格。对于任何使用 线性分配 内存的数据结构,您突然需要将内存增加几个数量级(约 30,000 个新的空单元格),可能(取决于数据结构)重新排列已存储的内存单元格并初始化大量永远不会使用的空值(language/library 实现将具有不同的实现细节,但类似的浪费缺点)。
Excel 本身会保持 arrays/arraylists 大小以覆盖每个 worksheet/range 中的每个单元格吗?不太可能。在您的示例中,单元格范围可能不是稀疏填充,但原则上和一般情况下,电子表格中包含数据的单元格数量是允许的最大矩形区域的一小部分。因此,哈希映射(或“多维哈希映射”)在解决此类映射到 Excel 问题的一般方法中并不是不合理的数据结构选择,尽管您可能有充分的理由在特定应用程序中进行不同的选择.