将二维数组使用System.arraycopy方法进行数组复制到一个一维数组

如何使用System.arraycopy方法将二维数组复制到一个一维数组

首先定义该二维数组行数为row = 5,列数为列数为line = 8,
int row= 5;
int line= 8;
int[ ][ ] arr = new int[row][line];
然后我们再来定义一个一维数组
int[ ] tem = new int[row * line];
定义二维数组之后我们通过产生1~100的随机数往二维数组添加数据,
如图:

 	 	int row = 5;
        int line = 8;
        int[][] arr = new int[row][line];
        for (int i = 0; i < row; i++) {
            for (int j = 0; j < line; j++) {
                //产生1-100的随机数字
                arr[i][j] = new Random().nextInt(100) + 1;
            }
        }

给二维数组添加数据后,我们在定义一个函数(函数返回值为int[ ]):
public static int[ ] getArray(int[ ][ ] array)来获取得到的一维数组,
实现该函数代码如下:

public static int[] getArray(int[][] array) {
        int[] tem = new int[array.length * array[0].length];
        int index = 0;
        for(int i = 0; i < array.length; i++) {
            System.arraycopy(array[i], 0, tem, index, array[i].length);
            index += array[i].length;
        }
        return tem;
    }

在这里要注意的是:arr.length得到的是该二维数组的行数,而array[0].length得到的是该二维数组的列数,我们利用一个循环来进行每行复制该二维数组的值,每次从二维数组的每行第一个元素的位置开始复制,复制的长度为array[i].length,也就是二维数组的列数,index来控制从二维数组复制到的数值放入一维数组从index开始的位置,每次复制完一行后,index的值就要加上array[i].length值,这样就可以保持复制到的数可以连续的放入一维数组中,最后我们就将得到的一位数组返回。
最后我们对得到的一位数组进行排序,使用Arrays.sort()方法
int[] tem = getArray(arr);
Arrays.sort(tem, 0, row * line);
然后再打印一维数组中的数据,得到一种结果如下
在这里插入图片描述
整体代码时下如下:

package Test;

import java.util.Arrays;
import java.util.Random;

public class Test {

    public static void main(String[] args) {
        int row = 5;
        int line = 8;

        int[][] arr = new int[row][line];

        for (int i = 0; i < row; i++) {
            for (int j = 0; j < line; j++) {
                //产生1-100的随机数字
                arr[i][j] = new Random().nextInt(100) + 1;
            }
        }

        int[] tem = getArray(arr);
        Arrays.sort(tem, 0, row * line);

        for (int i = 0; i < row * line; i++){
            System.out.print(tem[i] + " ");
        }
        System.out.println();
    }


    public static int[] getArray(int[][] array) {
        int[] tem = new int[array.length * array[0].length];
        int index = 0;
        for(int i = 0; i < array.length; i++) {
            System.arraycopy(array[i], 0, tem, index, array[i].length);
            index += array[i].length;
        }
        return tem;
    }
}

在这里注意要导入
import java.util.Arrays;
import java.util.Random;这两个包

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
数组是用来存放一组具有相同类型数据的数据结构。可以通过整型下标来访问数组中的 每一个值。数组是可以通过在某种数据类型后面加上[]来定义,在此之后跟上变量名就可以 定义相应类型的数组变量了。例如: int[] a; 还可以使用另一种方法定义数组,例如: int a[]; 以上这两种方法的定义是等价的。在这里只定义了一个整型数组变量 a,但是还没有将 a 真正的初始化为一个数组。为将一个数组初始化可以使用 new 关键字,也可以使用赋值语 句进行初始化。数组一旦被创建,就不能改变它的大小。 例如: a = new int[10]; //将 a 初始化为大小为 10 的整型数组。 int[] b = {0,1,2,3} //将 b 初始化为大小为 4 的整型数组, //并且 4 个分量的值分别等于 0,1,2,3 数组的下标从 0 开始计数,到数组大小减 1 结束。在 Java 中不能越过数组下标的范围 去访问数组中的数据。例如: a[10] = 10; 如果越过数组的下标访问数据,则会产生一个名为 ArrayIndexOutOfBoundsException 的 运行时错误。为避免产生这种错误,可以通过在访问某个下标的数组元素前检查数组的大小 来避免。数组的大小可以通过数组的变量 length 返回。例如: for (int i=0;i<a.length;i++) a[i] = i; 由于在 Java 中数组实际上是一个类,因此两个数组变量可以指向同一个数组。请读者 5 预测以下这段代码的运行结果: int[] a = {1,1,1}; int[] b = a; for (int i=0;i<b.length;i++) b[i]++; for (int i=0;i<a.length;i++) System.out.print(a[i]); 在这段代码中对数组 b 的每个分量加 1,但是在输出数组 a 的每个分量时,可以发现 a 的每个分量都发生了变化,都为 2。其原因是赋值语句 int[] b = a; 只是将对于数组 a 的引用 传递给变量 b,此时数组变量 a、b 实际上是指向同一个数组空间。图 1-2 说明了这段代码运 行时的情况。 图 1-2 两个数组变量指向同一数组空间 int[] a = {1,1,1}; a int[] b = a; 1 1 1 a b for (int i=0;i<b.length;i++) b[i]++; 1 1 1 2 2 2 a b for (int i=0;i<a.length;i++) System.out.print(a[i]); 输出:222 为了得到两个不同的但每个分量的值均相等的数组,可以使用循环语句或 System 类中 的 arraycopy 方法来完成。 同样当数组作为方法的参数传递时,也是传递的对于数组的引用,因此在方法中对数组 进行的操作会影响到原来的数组。例如: public void changeArray(int[] a){ for (int i=0;i<a.length;i++) a[i] = a[i] * 2; } 那么如下代码 int c = {2,2,2}; changeArray( c ); 6 for (int i=0;i<c.length;i++) System.out.print(c[i]); 的运行结果为:444。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值