字符串拷贝之System.arraycopy和Arrays.copyOfRange


前言

在项目中经常看到这些方法,但是隔段时间就记得没那么清晰了,在此做个简单的笔记,不做底层源码分析。

一、System.arraycopy

把一个数组中某一段字节数据放到另一个数组中。至于从第一个数组中取出几个数据,放到第二个数组中的什么位置都是可以通知这个方法的参数控制的。

public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
src:源数组;
srcPos:源数组要复制的起始位置;
dest:目的数组;
destPos:目的数组放置的起始位置;
length:复制的长度.

一般的高手,看完上面的定义基本就会用来,不会的话,也可以看看下面的示例。

注意:src 和 dest都必须是同类型或者可以进行转换类型的数组

方法示例

数组1int[] arr = { 1, 2, 3, 4, 5 };
数组2int[] arr2 = { 5, 6,7, 8, 9 };
运行:System.arraycopy(arr, 1, arr2, 0, 3);
得到:
int[] arr2 = { 2, 3, 4, 8, 9 };

这里要数组放入的数据的个数是不能超过它本身的长度的,否则会报数组异常错误。

此功能要求:

// 源的起始位置+长度不能超过末尾
// 目标起始位置+长度不能超过末尾
// 且所有的参数不能为负数

有趣的是这个函数可以实现自己到自己复制,

比如:int[] arr ={0,1,2,3,4,5,6};
System.arraycopy(arr,0,arr,3,3);
从自身从0开始取三个,放到自身下标为3开始的位置放入3个数据。
则结果为:{0,1,2,0,1,2,6};


二、Arrays.copyOfRange()

java.util.Arrays下的一个方法

源码:

 public static int[] copyOfRange(int[] original, int from, int to) {
        int newLength = to - from;
        if (newLength < 0)
            throw new IllegalArgumentException(from + " > " + to);
        int[] copy = new int[newLength];
        System.arraycopy(original, from, copy, 0,
                         Math.min(original.length - from, newLength));
        return copy;
    }

用途:
主要用于对一个已有的数组进行截取复制,复制出一个左闭右开区间的数组。
在这里插入图片描述

方法示例

	int[] arr = { 1, 2, 3, 4, 5, 6 };
	System.out.println(Arrays.toString(arr));
	// 复制整个数组
	int[] allArr = Arrays.copyOfRange(arr, 0, 6);
	String allString = Arrays.toString(allArr);
	// 复制部分数组
	int[] partArr = Arrays.copyOfRange(arr, 1, 4);
	String partString = Arrays.toString(partArr);
	System.out.println(allString);
	System.out.println(partString);

输出结果:
	[1, 2, 3, 4, 5, 6]
	[1, 2, 3, 4, 5, 6]
	[2, 3, 4]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值