【问题标题】:how to copy two-dimension array from one to another in java如何在java中将二维数组从一个复制到另一个
【发布时间】:2010-04-01 00:56:51
【问题描述】:

我想知道将二维数组从临时数组复制到原始数组的正确方法是什么。 数组大小在程序开始时未知,用户稍后设置。 这是代码:

私有静态 void copy_Matrix(int origin_Matrix[][] , int copy_Matrix[][], int row, int 列)

{

      for ( int i = 0 ; i < row-1; ++i)
      {
          for (int j = 0; j < column; j++)
          {
              origin_Matrix[i][j] = copy_Matrix[i][j]; 

          }
      }

}

我知道错了,请帮忙..

【问题讨论】:

    标签: java


    【解决方案1】:

    Java 中不需要前缀增量。此外,您不需要在 Java 中传递行数和列数(这只会为错误留出空间)。而且,还有一个函数,System.arraycopy,它至少应该和一次复制一个一样有效,如果不是更有效的话。

    private static void copy_Matrix(int origin_Matrix[][] , int copy_Matrix[][])
    {
        /* assert origin_Matrix.length == copy_Matrix.length */
        for ( int i = 0 ; i < origin_Matrix.length; i++)
        {
            /* assert origin_Matrix[i].length == copy_Matrix[i].length */
            System.arraycopy(origin_Matrix[i], 0, copy_Matrix[i], 0, origin_Matrix[i].length);
        }
    }
    

    请注意,您应该了解 Java 集合(例如 List/ArrayList 或 Vector),并有意识地决定在您的情况下,整数数组的轻微性能提升是必要的,而不是集合提供的额外可读性和便利性.

    【讨论】:

      【解决方案2】:

      你最好以这样的方式结束:

      private static int[][] copy_Matrix(int origin_Matrix[][])
      {
          int copy[][] = new int[origin_Matrix.length][origin_Matrix[0].length];
          for ( int i = 0 ; i < origin_Matrix.length; ++i)
          {
              System.arraycopy(origin_Matrix[i], 0, copy[i], 0, origin_Matrix[i].length);
          }
          return copy;
      }
      

      【讨论】:

        【解决方案3】:

        您为此使用原语而不是 Java Collections 是否有原因?如果没有,我会使用这些。它们经过优化,并提供了相当强大的 API 用于操作。

        【讨论】:

        • int 数组在某些操作中占有一席之地。例如,在处理疯狂的 Project Euler 问题时,我使用 Vector 代替数组,因为它更容易,而且我认为它已经足够优化,不会有太大的不同;在对速度感到失望之后,我切换到 int 数组,这是一个巨大的差异。但是我确实同意 Edan 应该了解 Java 集合,并有意识地决定整数数组更好。在这种情况下,他似乎只是从 C/C++ 移植代码,从前缀运算符和 row,col 参数可以看出。
        【解决方案4】:

        @伊甸园

        代码不是那么完美;你为什么要做i &lt; row-1

        检查第一个 for 循环?我猜你应该改用i &lt; row检查

        此外,您不需要明确传递大小。 您可以在数组上使用 .length 字段来获取它们的大小。

        【讨论】:

          猜你喜欢
          • 2012-11-13
          • 2021-12-31
          • 1970-01-01
          • 2014-09-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-04-10
          • 1970-01-01
          相关资源
          最近更新 更多