【问题标题】:Which is faster ? double [][] matrix or ArrayList<ArrayList<Double>>哪个更快? double [][] 矩阵或 ArrayList<ArrayList<Double>>
【发布时间】:2011-10-14 17:30:31
【问题描述】:

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

该操作只是将2个矩阵相乘或减、加等。

还要注意数组是原始的。

【问题讨论】:

    标签: java performance arraylist big-o


    【解决方案1】:

    double[][] 比使用 ArrayLists 和 Double 更节省内存。它将使用一小部分内存,这意味着您将获得更好的缓存行为。另外double[] 中的double 将在内存中保持连续,同时提高缓存性能。

    顺便说一句:Double 可能相当随机地排列在内存和缓存中。

    【讨论】:

    • (+1) 考虑参考地点。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 请定义非常大?
      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        double[][]ArrayList&lt;ArrayList&lt;Double&gt;&gt; 上的操作将在同一个 Big-O bounds 中运行

        也就是说,无症状边界是相同的——如果 ArrayList 不必resize,那么对于索引操作来说访问是真正的O(1)(即使如果C [常量] 对于访问 双/双装箱 内存局部性可能更大)。选择一个而不是另一个不会增加或降低复杂性或改变 Big-O。

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

        编码愉快。

        【讨论】:

          【解决方案6】:

          数组应该更快,因为 ArrayLust 还使用内部数组,因此您需要额外调用 (get(x).get(y)),这将消耗更多时间。

          【讨论】:

            【解决方案7】:

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

            【讨论】:

              猜你喜欢
              • 2016-11-19
              • 2016-10-10
              • 2019-10-03
              • 2011-06-02
              • 1970-01-01
              • 2015-07-11
              • 1970-01-01
              • 2013-11-22
              • 1970-01-01
              相关资源
              最近更新 更多