Array数组的复制

Array数组的复制

Arrays.copyOfRange

1、使用 Arrays.copyOfRange(T[] original, int from, int to) 方法
    ⚠️ 复制的区间范围,前闭后开[from,to)

  • original参数:要复制范围的原始数组
  • from参数:要复制的区间范围的初始索引(from必须位于0和原始数组的长度之间,可以等于数组的长度但不能大于数组长度)
  • to参数:要复制的区间范围的结束索引(to必须大于或等于初始索引from,可以超出数组长度,超出部分会补齐数组对应数据类型的默认值)
  • 返回一个新数组,新数组长度为to - from;超出原始数组范围的部分会填充数组对应的数据类型的默认值(int、char类型定义的数组默认值为0,double、float类型定义的数组默认值为0.0,String类型定义的数组默认值为null,boolean类型定义的数组默认值为false)

以初始索引from和结束索引to的几种取值情况举例

String[] arr = {"a","b","c","d","e","f","g"}; //length = 7

//0<初始索引<数组长度 && 结束索引<=数组长度 (正常复制)
String[] arr1= Arrays.copyOfRange(arr, 1, 5); 
System.out.println(Arrays.toString(arr1)); //[b, c, d, e]

//初始索引<数组长度 && 结束索引>数组长度  (超出部分填充默认类型)
String[] arr2 = Arrays.copyOfRange(arr, 5, 10);
System.out.println(Arrays.toString(arr2)); //[f, g, null, null, null]

//初始索引>=数组长度 && 结束索引 > 数组长度 (全为默认值,无意义)
String[] arr3 = Arrays.copyOfRange(arr, 7, 10); 
System.out.println(Arrays.toString(arr3)); //[null, null, null]

//初始索引 = 结束索引 (前闭后开,返回一个空数组)
String[] arr4 = Arrays.copyOfRange(arr, 5, 5);
System.out.println(Arrays.toString(arr4)); //[]

System.arraycopy

使用 System.arraycopy(Object src, int srcPos,Object dest, int destPos,int length) 方法

  • src参数:源数组(要被复制的数组)
  • srcPos参数:源数组中的起始位置(开始复制的下标)
  • dest参数:目标数组(要操作的数组)
  • destPos参数:目标数组中的起始位置(从目标数组指定位置开始复制)
  • length参数:要复制的数组元素的数量

    ⚠️️src源数组与目标数组数据类型需相同
    ⚠️️ 源数组起始位置+复制长度 与 目标数组起始位置+复制长度的值均不能超过数组长度 (srcPos+length<src.length) && (destPos+length<dest.length)
    ⚠️️两个不同数组间的复制,不会影响源数组的值


自身->自身(相同数组间)的复制

//操作自身数组,实现自身复制修改的功能
int[] nums = {1,2,3,4,5,6,7};
//从nums数组的0下标处开始复制4位到num数组的从3下标处开始的4位
System.arraycopy(nums,0,nums,3,4); 
System.out.println(Arrays.toString(nums)); //[1, 2, 3, 1, 2, 3, 4]

a数组->b数组(不同数组间)的复制

//从a数组复制到b数组
int[] arr1 = {66,88,99,111};
int[] arr2 = {1,2,3,4,5,6,7};
//从arr1数组的1下标处开始复制2位(88,99)到arr2数组的4下标处开始的2位
System.arraycopy(arr1,1,arr2,4,2);
System.out.println(Arrays.toString(arr1)); //[66, 88, 99, 111]
System.out.println(Arrays.toString(arr2)); //[1, 2, 3, 4, 88, 99, 7]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值