具有已知索引的Java Hashmap和2D数组性能
我使用Hashmap和2D数组读取excel Hashmap-所有数据都将转换为字符串,并使用唯一的字符串键rowno+colno保存 示例:键11-第1行第1列的数据 2D数组-所有数据将转换为字符串并存储。 arr[00]=“第1行第1列的数据” 一旦储存起来。我需要在我知道索引的地方多次使用这些数据 比如说,如果我想得到第1行第3列的数据,我将使用下面的公式 HAsmap-字符串值=Hm.get(“13”) 2Darray-字符串值=arr[02]具有已知索引的Java Hashmap和2D数组性能,java,arrays,hashmap,Java,Arrays,Hashmap,我使用Hashmap和2D数组读取excel Hashmap-所有数据都将转换为字符串,并使用唯一的字符串键rowno+colno保存 示例:键11-第1行第1列的数据 2D数组-所有数据将转换为字符串并存储。 arr[00]=“第1行第1列的数据” 一旦储存起来。我需要在我知道索引的地方多次使用这些数据 比如说,如果我想得到第1行第3列的数据,我将使用下面的公式 HAsmap-字符串值=Hm.get(“13”) 2Darray-字符串值=arr[02] 在这种情况下,哪一个更快。我需要存储一个
在这种情况下,哪一个更快。我需要存储一个巨大的数据级别。 < P>二维数组访问数据的速度更快,但还需要考虑占用空间。 如果您需要存储所有单元二维数组也会更快,但如果您只需要存储少数单元,则必须使用称为稀疏矩阵的方法,在这种情况下,就所用空间而言,映射是最佳解决方案,且性能相似,因此使用更少的内存更好(GC更少) 基本上可以有以下矩阵
bi dimensional array | Map
Space | Speed | Space | Speed
-------------------------------------------
| | |
Store all data Best | Best | Good | Good
Store few Very bad | Very good*| Very good | Good
考虑到如果GC频繁发生,并且使用一个非常大的二维矩阵,使用很少的记录就可以大大降低应用程序的整体速度。 < P>二维数组可以更快地访问数据,但还需要考虑空间占用。 如果您需要存储所有单元二维数组也会更快,但如果您只需要存储少数单元,则必须使用称为稀疏矩阵的方法,在这种情况下,就所用空间而言,映射是最佳解决方案,且性能相似,因此使用更少的内存更好(GC更少) 基本上可以有以下矩阵
bi dimensional array | Map
Space | Speed | Space | Speed
-------------------------------------------
| | |
Store all data Best | Best | Good | Good
Store few Very bad | Very good*| Very good | Good
考虑到如果GC频繁发生,并且使用一个非常大的二维矩阵,其中很少的记录被使用,那么你的应用程序的整体速度会大大降低。但最重要的是,你的第一项技术不起作用。什么是键123,是第1行第23列,还是第12行第3列?您应该设计一个包含两个整数的键类,以及一个正确的equals()和hashCode()方法,而不是使用字符串。arr[0][2]也可以访问2D数组。arr[02]这样的符号对于二维数组没有意义,除非您需要第一行,在这种情况下,您可以使用arr[0]。@JBNizet谢谢。你是对的,第一种技术不行。我需要使用2D数组。2D数组应该稍微快一点。但最重要的是,你的第一项技术不起作用。什么是键123,是第1行第23列,还是第12行第3列?您应该设计一个包含两个整数的键类,以及一个正确的equals()和hashCode()方法,而不是使用字符串。arr[0][2]也可以访问2D数组。arr[02]这样的符号对于二维数组没有意义,除非您需要第一行,在这种情况下,您可以使用arr[0]。@JBNizet谢谢。你是对的,第一种技术不行。我需要使用2D数组。谢谢。我会选择数组谢谢。我会选择数组