要把一个二维数组整体所有元素进行排序,应使用System.arraycopy(src, srcPos, dest, destPos, length)方法,此方法可以调整复制到一维数组的位置,然后使用Arrays.sort进行排序。
而Arrays.copyOfRange(int[] original, int from, int to)方法不能在一维数组进行确定位置复制,也就是说,二维数组无法全部复制到一维数组(只能复制一行),只能在循环内部先对一行进行复制,排序,由此复制得到的二维数组是每一行进行了排序,而不是整体所有元素进行了排序。
System.arraycopy(src, srcPos, dest, destPos, length)
public class HelloWorld {
public static void main(String[] args) {
int a [] = new int[]{18,62,68,82,65,9};
int b[] = new int[3];//分配了长度是3的空间,但是没有赋值
//通过数组赋值把,a数组的前3位赋值到b数组
//方法一: for循环
for (int i = 0; i < b.length; i++) {
b[i] = a[i];
}
//方法二: System.arraycopy(src, srcPos, dest, destPos, length)
//src: 源数组
//srcPos: 从源数组复制数据的起始位置
//dest: 目标数组
//destPos: 复制到目标数组的启始位置
//length: 复制的长度
System.arraycopy(a, 0, b, 0, 3);
//把内容打印出来
for (int i = 0; i < b.length; i++) {
System.out.print(b[i] + " ");
}
}
}
Arrays.copyOfRange(int[] original, int from, int to)
import java.util.Arrays;
public class HelloWorld {
public static void main(String[] args) {
int a[] = new int[] { 18, 62, 68};
// copyOfRange(int[] original, int from, int to)
// 第一个参数表示源数组
// 第二个参数表示源数组开始位置(取得到)
// 第三个参数表示源数组结束位置(取不到)
int[] b = Arrays.copyOfRange(a, 0, 3);
for (int i = 0; i < b.length; i++) {
System.out.print(b[i] + " ");
}
}
}
//数组复制,不使用复制方法,找下标匹配
public void arrayTestTwo(){
int[][] a = new int[5][8];
int[] b = new int[a.length * a[0].length];
for (int i = 0; i <a.length ; i++) {
for (int j = 0; j <a[i].length ; j++) {
a[i][j]= (int) (Math.random()*100);
System.out.print(a[i][j]+" ");
b[i*a[i].length+j]=a[i][j];
}
System.out.println();
}
Arrays.sort(b);
System.out.println(Arrays.toString(b));
for (int i = 0; i <a.length ; i++) {
for (int j = 0; j < a[i].length; j++) {
a[i][j]=b[i*a[i].length+j];
System.out.print(a[i][j]+" ");
}
System.out.println();
}
}
例:
二维数组a[5][8]
a.length=5
a[0].length=8
a[1].length=8
二维数组里面的一维数组a[i]的下标只有0-7,没有8-16
二维数组输出:
//1.
int[][] a = new int[5][5];
for (int[] b:a
) {
for (int c:b
) {
System.out.print(c+" ");
}
System.out.println();
}
//2.
int[][] a = new int[5][8];
for (int i = 0; i <a.length ; i++) {
for (int j = 0; j <a[i].length ; j++) {
a[i][j] = (int) (Math.random() * 100);
// 3.
// System.out.print(" "+a[i][j]);
}
System.out.println(Arrays.toString(a[i]));
// System.out.println();
}