如何使用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;这两个包