为了账号安全,请及时绑定邮箱和手机立即绑定

在java中复制一个2d数组

在java中复制一个2d数组

繁星淼淼 2019-08-09 10:28:17
在java中复制一个2d数组我有一个名为矩阵int的二维数组,我想复制到方法中的局部变量,所以我可以编辑它什么是复制阵列的最佳方法,我遇到了一些麻烦例如    int [][] myInt;     for(int i = 0; i< matrix.length; i++){         for (int j = 0; j < matrix[i].length; j++){             myInt[i][j] = matrix[i][j];         }     }     //do some stuff here     return true;}
查看完整描述

3 回答

?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

复制数组有两种好方法就是使用clone和System.arraycopy()

以下是如何使用克隆2D案例:

int [][] myInt = new int[matrix.length][];for(int i = 0; i < matrix.length; i++)
    myInt[i] = matrix[i].clone();

对于System.arraycopy(),您使用:

int [][] myInt = new int[matrix.length][];for(int i = 0; i < matrix.length; i++){
  int[] aMatrix = matrix[i];
  int   aLength = aMatrix.length;
  myInt[i] = new int[aLength];
  System.arraycopy(aMatrix, 0, myInt[i], 0, aLength);}

我没有基准,但我可以用2美分的赌注,他们比自己做的更快,更容易出错。特别是,System.arraycopy()因为它是在本机代码中实现的。

希望这可以帮助。


查看完整回答
反对 回复 2019-08-09
?
慕仙森

TA贡献1827条经验 获得超7个赞

可以使用Java 8中的流来复制2D数组。

@Testpublic void testCopy2DArray() {
   int[][] data = {{1, 2}, {3, 4}};
   int[][] dataCopy = Arrays.stream(data)
             .map((int[] row) -> row.clone())
             .toArray((int length) -> new int[length][]);

   assertNotSame(data, dataCopy);
   assertNotSame(data[0], dataCopy[0]);
   assertNotSame(data[1], dataCopy[1]);

   dataCopy[0][1] = 5;
   assertEquals(2, data[0][1]);
   assertEquals(5, dataCopy[0][1]);}


查看完整回答
反对 回复 2019-08-09
?
DIEA

TA贡献1820条经验 获得超2个赞

您没有初始化本地2D阵列。

int[][] myInt = new int[matrix.length][];for(int i = 0; i < matrix.length; i++){
  myInt[i] = new int[matrix[i].length];
  for (int j = 0; j < matrix[i].length; j++)
  {
    myInt[i][j] = matrix[i][j];
  }}


查看完整回答
反对 回复 2019-08-09
  • 3 回答
  • 0 关注
  • 528 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信