我有一个程序,对于像细胞自动机的程序,我需要在尽可能短的时间内(以毫秒为单位)对类似List的对象进行100,000到1,000,000随机读取。我认为我正在使用的更新算法已经过优化(有效跟踪 Activity 细胞等)。列表确实需要更改大小,但是性能并不那么重要。所以我想知道使用Arrays而不是ArrayLists产生的性能是否足以在如此短的时间内处理大量读取而产生差异。目前,我正在使用ArrayLists。
编辑:
我忘了提:我只是存储整数,所以另一个因素是使用Integer包装器类(对于ArrayLists)与整数(对于数组)。有谁知道使用ArrayList是否实际上需要进行3次指针查找(一次用于ArrayList,一次用于基础数组,一次用于Integer-> int),因为该数组仅需要1次(数组地址+特定偏移量) int)? HotSpot会优化多余的查找吗?这些额外的查找有多重要?
编辑2:
另外,我忘了提及我还需要进行随机访问写入(写入,而不是插入)。
最佳答案
既然您已经提到了数组实际上是原始类型的数组,请考虑使用Trove库中的原始类型类的集合。
@viking报告在他的应用程序中使用Trove显着(十倍!)加速-请参阅注释。缺点是Trove集合类型与Java的标准集合API类型不兼容。因此Trove(或类似的库)在所有情况下都无法解决问题。