【发布时间】:2011-10-14 17:30:31
【问题描述】:
在更快的 Java 中,请注意我不需要 Big O 中的(删除、添加)灵活性。但我当然需要 Access Big O。
该操作只是将2个矩阵相乘或减、加等。
还要注意数组是原始的。
【问题讨论】:
标签: java performance arraylist big-o
在更快的 Java 中,请注意我不需要 Big O 中的(删除、添加)灵活性。但我当然需要 Access Big O。
该操作只是将2个矩阵相乘或减、加等。
还要注意数组是原始的。
【问题讨论】:
标签: java performance arraylist big-o
double[][] 比使用 ArrayLists 和 Double 更节省内存。它将使用一小部分内存,这意味着您将获得更好的缓存行为。另外double[] 中的double 将在内存中保持连续,同时提高缓存性能。
顺便说一句:Double 可能相当随机地排列在内存和缓存中。
【讨论】:
double[][] 会更快,因为它会避免在算术运算期间自动装箱。
【讨论】:
使用double [][],您无需担心自动装箱或内部调整大小/复制操作,因此速度会更快。
另一方面,性能差异应该是不明显的,除非您使用的是非常大的集合。
【讨论】:
double [] [] 更快。在 java 中没有比这更原始的语句了。
【讨论】:
double[][] 和 ArrayList<ArrayList<Double>> 上的操作将在同一个 Big-O bounds 中运行。
也就是说,无症状边界是相同的——如果 ArrayList 不必resize,那么对于索引操作来说访问是真正的O(1)(即使如果C [常量] 对于访问 和 双/双装箱 和 内存局部性可能更大)。选择一个而不是另一个不会增加或降低复杂性或改变 Big-O。
哪个挂钟更快?我的赌注是在数组上,但“确定”的唯一方法——包括“多快”以及在哪些情况下——是在给定环境/问题/问题大小上对不同结构进行基准测试并比较结果。 (这应该是尝试“优化”时的第一步。)
编码愉快。
【讨论】:
数组应该更快,因为 ArrayLust 还使用内部数组,因此您需要额外调用 (get(x).get(y)),这将消耗更多时间。
【讨论】:
[][] 数组会更快。 ArrayList 访问基本上一样快(它在内部使用 []),但是需要额外的基于对象的工作(例如,它必须查看两个对象而不是一个数组)会使其稍微慢一些。
【讨论】: