java数组拷贝主要有四种方法,java数组的底层实现
00-1010循环复制数组Arrays.copyOf方法Arrays.copyofRange方法System.arraycopy方法克隆方法summary
00-1010用循环复制数组非常简单,就是用循环把要复制的数组的元素一个一个赋给新数组。具体代码实现如下:
public static void main(String[]args){ int[]arr={ 1,2,3,4,5 };int[]copy=new int[arr . length];for(int I=0;长度;I){ copy[I]=arr[I];}}这是我们通常想到的方法。下面是JAVA为我们提供的一些方便的方法。
00-1010因为我是一个复制的整数数组,所以我使用Arrays.copyOf方法复制一个整数数组。你也可以复制其他类型的数组,而不仅仅是整数数组。
让我们通过复制一个整数数组来解释Arrays.copyOf方法。让我们先来看看Arrays.copyOf方法底部的原始代码:
public static int[]copy of(int[]original,int new length){ int[]copy=new int[new length];System.arraycopy(original,0,copy,0,Math.min(original.length,new length));返回副本;}我们可以看到Array.copyOf方法的返回值是一个整数数组,而参数有两个参数,一个是整数数组,一个是整数变量。
参数中的整数数组是我们要复制的数组的数组名。
参数中的整数变量是我们要复制的数组的长度。
因为有返回值,所以当我们使用Arrays.copyOf方法时,我们需要一个数组来接收返回值。代码实现如下:
public static void main(String[]args){ int[]arr={ 1,2,3,4,5 };int[] copy=Arrays.copyOf(arr,arr . length);}注意:副本的长度可以超过要复制的数组的长度。如果超过复制数组的长度,多余的元素值将为0;比如我想复制arr数组,但是arr数组的大小是5。如果我复制arr.length*2,那么复制数组的大小就变成了10,6~10个元素的值都是0。这就是产能扩张。
00-1010如果要复制部分数组的一部分,可以使用Arrays.copyRange方法与上面相同,也是通过复制整数数组来说明。让我们先来看看它的底层源代码:
public static int[]copyofrage(int[]original,int from,int to){ int new length=to-from;if (newLength 0)抛出新的IllegalArgumentException(从“”到);int[]copy=new int[new length];System.arraycopy(original,from,copy,0,Math.min(original.length - from,new length));返回副本;}我们从Arrays.copyRange的源代码中可以看到,返回值是一个整型数组,而参数是一个整型数组和两个整型变量。
参数中的整数数组是要复制的数组的数组名。
参数中的两个整型变量from和to是要复制数组元素的区域。注意,这个范围是[form,to],它是左闭右开的,不包括to位置的元素。代码实现如下:
public static void main(String[]args){ int[]arr={ 1,2,3,4,5 };int[]copy=arrays . copyofrage(arr,1,3);}注意:数组下标从0开始,编号为1~3的元素指的是2,3,4。但是右边是开区间,所以不包括4,所以复制这个数组知识复制2和3两个元素。
00-1010然后我们来说说System.arraycopy方法。其实细心的同学已经发现,前两个方法的源代码中都有System.arraycopy方法,它们的底层也是由System.arraycopy方法实现的。我们先来看看它底层的原码。
public static native void array copy(Object src,int srcPos,Object dest,int destPos,int length);
System.arraycopy看不到它实现的原代码,因为native,它的底层是用C/C实现的.但是native方法的好处是速度非常快。代码实现如下:
public static void main(String[]args){ int[]arr={ 1,2,3,4,5 };int[]copy=new int[arr . length];System.arraycopy(arr,0,copy,0,arr . length);}此时arr的整个数组都被复制了。如果要进行部分复制,可以通过更改参数来完成部分复制。
00-1010最后一个是数组名。克隆法,可以理解。代码实现如下:
public static void main(String[]args){ int[]arr={ 1,2,3,4,5 };int[]copy=arr . clone();}这样文案就完成了。这个方法主要产生对象的副本,地址还是不一样的。
00-1010今天主要讲解数组复制的几种方法。虽然它们可能不会经常使用,但我们最好掌握它们。也许那天会用到。以后你一定会感谢自己现在努力学习。
关于Java通过底层源代码理解数组复制的这篇文章到此结束。关于Java array copy的更多信息,请搜索popular IT之前的文章或者继续浏览下面的相关文章。我希望你以后能更多地支持流行音乐!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。