Arrays
Arrays.copyOf(original, newLength);和System.arraycopy(src, srcPos, dest, destPos, length);的概念,每个参数的意义和它们的用法。
Arrays.copyOf(original, newLength);
概念:Arrays.copyOf();的实质其实就是改变数组的长度,实现数组的扩容和缩容。
Arrays.copyOf(original,newLength);
original:需要改变的数组名
newLength:数组改变后新的长度
效果展示:(数组缩容)
代码如下:
public static void main(String[] args) {
//定义一个初始数组,初始数组的长度为8
int[] a = {1,2,3,4,5,6,7,8};
System.out.println("源数组:"+Arrays.toString(a));
//数组缩容,将数组的长度由8缩小为5
a = Arrays.copyOf(a, 5);
System.out.println("缩容后的数组:"+Arrays.toString(a));
}
输出结果:
数组缩容后,缩容部分的数据会被抹除,不再显示。
效果展示2:(数组扩容)
代码如下:
public static void main(String[] args) {
//定义一个初始数组,初始数组的长度为8
int[] a = {1,2,3,4,5,6,7,8};
System.out.println("源数组:"+Arrays.toString(a));
//数组扩容,将数组的长度由8扩展为10
a = Arrays.copyOf(a, 10);
System.out.println("缩容后的数组:"+Arrays.toString(a));
}
输出结果:
数组扩容后,扩大部分的数据会默认填充为类型的默认值。
System.arraycopy(src, srcPos, dest, destPos, length);
概念:将一个数组中的数据拷贝到另一个数组中。
System.arraycopy(src,
srcPos,
dest,
destPos,
length);
src:源数组
srcPos:源数组需要拷贝的起始位置
dest:目标数组
destPos:拷贝数据在目标数组的起始位置
length:拷贝数据的长度
效果实现:将数组a的所有数据拷贝到数组b的最后面
实现步骤:1.将b数组扩容,扩大的长度为a数组的长度
2.使用System.arraycopy();方法将数组a拷贝到数组b的最后
代码如下:
public static void main(String[] args) {
//定义初始数组
int[] b = {1,2,3,4,5,6,7,8};
System.out.println("目标数组:"+Arrays.toString(b));
//定义需要拷贝的数组
int[] a = {9,10};
System.out.println("拷贝数组:"+Arrays.toString(a));
//先将b数组扩容,扩容长度为需要拷贝数据的长度
b = Arrays.copyOf(b, b.length+a.length);
/**拷贝数据System.arraycopy(
* 拷贝数据所在的数组, (本次需要拷贝的数据为数组a中的数据)
* 拷贝数据在数组中的起始位置, (本次需要拷贝的数据是数组a的所有数据,所以拷贝数据的起始位置为0)
* 拷贝到的数组, (本次拷贝的目标数组是数组b)
* 拷贝数据在目标数组中的起始位置, (本次拷贝的数据要放在数组b的最后面,但是因为之前已经给数组b扩容了,所以在填写拷贝数据的起始位置时,要用数组b的长度减去扩容的长度)
* 拷贝数据的长度 (数组a的长度)
* );
* */
System.arraycopy(a, 0, b, b.length-a.length, a.length);
System.out.println("拷贝后的数组:"+Arrays.toString(b));
}
输出结果: