欢迎访问 生活随笔!

凯发ag旗舰厅登录网址下载

当前位置: 凯发ag旗舰厅登录网址下载 > 编程资源 > 编程问答 >内容正文

编程问答

system.arraycopy()和 arrays.copyof()的区别联系(源码深度解析copyof扩容原理) -凯发ag旗舰厅登录网址下载

发布时间:2024/10/14 编程问答 10 豆豆
凯发ag旗舰厅登录网址下载 收集整理的这篇文章主要介绍了 system.arraycopy()和 arrays.copyof()的区别联系(源码深度解析copyof扩容原理) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

public static void arraycopy(object src, int srcpos, object dest, int destpos, int length):将指定源数组中的数组从指定位置开始复制到目标数组的指定位置。

例子:

package untl; public class myobject {public static void main(string[] args) {int arr[]={1,2,3,4,5,6,7,8};int brr[]=new int [10];system.arraycopy(arr,1,brr,3,5);for (int a: brr) {system.out.println(a);}} } 运行结果: 0 0 0 2 3 4 5 6 0 0

从例子我们可以得出参数的意思:

从src数组的第srcpos位置的元素开始后的length个元素复制到dest数组里以destpos索引为起始位置往后延申

选择指定的数组,截断或填充空值(如果需要),使副本具有指定的长度。以达到扩容的目的

//arrays的copyof()方法传回的数组是新的数组对象,改变传回数组中的元素值,不会影响原来的数组。 //copyof()的第二个自变量指定要建立的新数组长度,如果新数组的长度超过原数组的长度,则保留数组默认值 public static <t> t[] copyof(t[] original, int newlength) {return (t[]) copyof(original, newlength, original.getclass()); }/*** @description 复制指定的数组, 如有必要用 null 截取或填充,以使副本具有指定的长度* 对于所有在原数组和副本中都有效的索引,这两个数组相同索引处将包含相同的值* 对于在副本中有效而在原数组无效的所有索引,副本将填充 null,当且仅当指定长度大于原数组的长度时,这些索引存在* 返回的数组属于 newtype 类** @param original 要复制的数组* @param newlength 副本的长度* @param newtype 副本的类* * @return t 原数组的副本,截取或用 null 填充以获得指定的长度* @throws negativearraysizeexception 如果 newlength 为负* @throws nullpointerexception 如果 original 为 null* @throws arraystoreexception 如果从 original 中复制的元素不属于存储在 newtype 类数组中的运行时类型*/public static <t,u> t[] copyof(u[] original, int newlength, class<? extends t[]> newtype) {@suppresswarnings("unchecked")t[] copy = ((object)newtype == (object)object[].class)? (t[]) new object[newlength]: (t[]) array.newinstance(newtype.getcomponenttype(), newlength);system.arraycopy(original, 0, copy, 0,math.min(original.length, newlength));return copy; }

例子:

public static void main(string[] args) {int[] a = new int[3];a[0] = 0;a[1] = 1;a[2] = 2;int[] b = arrays.copyof(a, 10);system.out.println("b.length " b.length);for (int i : b) {system.out.print(i " ");}} 运行结果: b.length10 0 1 2 0 0 0 0 0 0 0

联系:看两者源代码可以发现copyof()内部调用了system.arraycopy()方法
区别:
1arraycopy()需要目标数组,将原数组拷贝到你自己定义的数组里,而且可以选择拷贝的起点和长度以及放入新数组中的位置
2.copyof()是系统自动在内部新建一个数组,并返回该数组。

1.从两种拷贝方式的定义来看:
system.arraycopy()使用时必须有原数组和目标数组,arrays.copyof()使用时只需要有原数组即可。
2.从两种拷贝方式的底层实现来看:
system.arraycopy()是用c或c 实现的,arrays.copyof()是在方法中重新创建了一个数组,并调用system.arraycopy()进行拷贝。
3.两种拷贝方式的效率分析:
由于arrays.copyof()不但创建了新的数组而且最终还是调用system.arraycopy(),所以system.arraycopy()的效率高于arrays.copyof()。

总结

以上是凯发ag旗舰厅登录网址下载为你收集整理的system.arraycopy()和 arrays.copyof()的区别联系(源码深度解析copyof扩容原理)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得凯发ag旗舰厅登录网址下载网站内容还不错,欢迎将凯发ag旗舰厅登录网址下载推荐给好友。

网站地图