哪个更快? double [] [] matrix或ArrayList <arraylist <double>&gt; </arraylist <double>

时间:2011-10-14 17:30:32

标签: java performance arraylist big-o

在Java中更快注意到我不需要Big O中的(删除,添加)灵活性。但我当然需要Access Big O.

操作只是乘以2个矩阵或减去,加上等等。

另请注意,该数组是原始的。

7 个答案:

答案 0 :(得分:6)

double[][]会更快,因为它会在算术运算期间避免自动装箱。

答案 1 :(得分:6)

使用double [][],您无需担心自动装箱或内部调整大小/复制操作,因此速度会更快。

另一方面,除非您使用非常大的集合,否则性能差异应该是不明显的。

答案 2 :(得分:6)

double[][]比使用ArrayLists和Double更有效。它将使用一小部分内存意味着您将获得更好的缓存行为。此外,double中的double[]将在内存中连续,也可以提高缓存性能。

顺便说一句:Double可能会在内存中随意排列,然后用于缓存。

答案 3 :(得分:1)

double [] []更快。在java中,没有比这更原始的语句。

答案 4 :(得分:1)

double[][]ArrayList<ArrayList<Double>>上的操作将在同一Big-O bounds 中运行。

也就是说,无症状边界是相同的 - 如果ArrayList不必调整大小,那么对于索引操作来说访问真的是O(1)(甚至虽然C [常数]对于访问来说可能更大,但是double / Double boxing memory-locality)。选择一个将不会增加或降低复杂性或更改Big-O。

哪一个挂钟更快?我的赌注在阵列上,但唯一的方法是“知道某些” - 包括“快多少”,以及在哪些情况下 - 对给定环境/问题/问题大小的不同结构进行基准测试并比较结果。 (这应该是尝试“优化”时的第一步。)

快乐的编码。

答案 5 :(得分:0)

数组应该更快,因为ArrayLust也使用了一个内部数组,因此你有一个额外的调用(get(x).get(y)),这将消耗更多的时间。

答案 6 :(得分:0)

[][]数组会更快。 ArrayList访问基本上同样快(它在内部使用[])但是需要额外的基于工作对象的工作(例如,它必须查看两个对象而不是一个数组)慢。