前言
在项目中经常看到这些方法,但是隔段时间就记得没那么清晰了,在此做个简单的笔记,不做底层源码分析。
一、System.arraycopy
把一个数组中某一段字节数据放到另一个数组中。至于从第一个数组中取出几个数据,放到第二个数组中的什么位置都是可以通知这个方法的参数控制的。
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
src:源数组;
srcPos:源数组要复制的起始位置;
dest:目的数组;
destPos:目的数组放置的起始位置;
length:复制的长度.
一般的高手,看完上面的定义基本就会用来,不会的话,也可以看看下面的示例。
注意:src 和 dest都必须是同类型或者可以进行转换类型的数组
方法示例
数组1:int[] arr = {
1, 2, 3, 4, 5 };
数组2:int[] 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]