Arrays.copyOfRange(),System.arraycopy() 数组复制,数组扩容
Arrays.copyOfRange()
当需要将数组中的 长度扩容时, 数组复制 使用
需要用到Arrays 类提供的的
参数解析
* @param original the array from which a range is to be copied * @param from the initial index of the range to be copied, inclusive * @param to the final index of the range to be copied, exclusive.
---------来自源码注释
第一个参数 从中复制范围的数组
第二个参数 起始的index(索引) inclusive(包括)
第三个参数 末尾的index(索引) exclusive(不包括)
举个例子
public static void main(String[] args) {
int[] a ={1,2,3,4,5,6};
int[] c = Arrays.copyOfRange(a,0 , 10);//数组扩容
System.out.println(Arrays.toString(c));
System.out.println("c"+c.length);
System.out.println("a"+a.length);
}
此时输出
[1, 2, 3, 4, 5, 6, 0, 0, 0, 0]
c10
a6
查看源码
----来java.util.Arrays
此时可以看到,新创建了一个数组copy 长度为 to - from 返回的是一个新的数组
System.arraycopy()
并调用 java.lang.System中的
public static native void arraycopy(Object src, int srcPos,
Object dest, int destPos,
int length);
System中arraycopy()参数
* @param src the source array. * @param srcPos starting position in the source array. * @param dest the destination array. * @param destPos starting position in the destination data. * @param length the number of array elements to be copied.
src 原数组
srcPos 原数组起始的位置
dest 目标数组
destpos 目标数组起始位置
length 复制length长度从原数组到起始数组
实例 使用这个方法模仿队列的出队
public static void main(String[] args) {
int[] a ={1,2,3,4,5,6};
int[] c = Arrays.copyOfRange(a,0 , 10);//数组扩容
System.out.println(Arrays.toString(c));
System.out.println("c的长度为:"+c.length);
System.out.println("a的长度为:"+a.length);
System.arraycopy(a,1,a,0, a.length-1);
System.out.println(Arrays.toString(a));//出队列
}
输出
[1, 2, 3, 4, 5, 6, 0, 0, 0, 0]
c的长度为:10
a的长度为:6
[2, 3, 4, 5, 6, 6]
所以Arrays.copyOfRange()方法底层调用了System.arraycopy()
总结
本文讲了Arrays.copyOfRange()方法针对数组的使用
底层创建一个长度为to-from的数组
将原数组中的数据从从索引form 复制长度为min(form到to,length-from) 复制到copy这个数组中并返回copy这个数组.
复制时有两种情况
to-from小于原数组的长度 此时相当于截取复制
to-from大于原数组的长度 此时相当于扩容复制
毕竟当调用 System.arraycopy 方法时要保证取的 长度要小于src的长度 放的长度要 小于copy的长度
所以要调用Math.min()
原文地址:https://blog.csdn.net/red_Apple_3_11/article/details/144144085
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!