System.arraycopy和Arrays.copyOfRange的区别,数组复制,按下标复制,二维数组输出

本文介绍如何使用System.arraycopy和Arrays.sort方法将二维数组转换为一维数组并进行排序,对比Arrays.copyOfRange方法的局限性,同时提供了一个实现整体排序的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

要把一个二维数组整体所有元素进行排序,应使用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();
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值