在Java中更快注意到我不需要Big O中的(删除,添加)灵活性。但我当然需要Access Big O.
操作只是乘以2个矩阵或减去,加上等等。
另请注意,该数组是原始的。
答案 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
访问基本上同样快(它在内部使用[]
)但是需要额外的基于工作对象的工作(例如,它必须查看两个对象而不是一个数组)慢。