System.arraycopy 和 Array.clone 的比较

 1 /**
 2      * 复制功能更测试
 3      */
 4     public static void main01(String[] args) {
 5         String[] array01 = new String[]{"01", "02", "03"};
 6         String[] array02 = array01.clone();
 7         System.out.println(array01);
 8         System.out.println(array02);
 9         array02[1] = "将哈哈哈哈";
10         array02[2] = null;
11         System.out.println(Arrays.toString(array01));
12         System.out.println(Arrays.toString(array02));
13
14         /*
15         ->输出:
16         [Ljava.lang.String;@16acdd1
17         [Ljava.lang.String;@ee6681
18         [01, 02, 03]
19         [01, 将哈哈哈哈, null]
20         */
21     }
22
23     /**
24      * 对象类型的元素拷贝速度测试
25      */
26     public static void main02(String[] args) {
27         String[] array01 = new String[]{"01", "02", "03"};
28         long begin = System.nanoTime();
29         for (int i = 0; i < 100000000; i++) {
30             // String[] array02 = array01.clone();
31             String[] array02 = new String[array01.length];
32             System.arraycopy(array01, 0, array02, 0, array01.length);
33         }
34         long end = System.nanoTime();
35         System.out.println(end - begin);
36
37         /*
38         ->输出:
39         使用 array.clone():
40         13189919392
41         使用 System.arraycopy():
42         1689826432
43         */
44     }
45
46     /**
47      * 基本数据类型的元素拷贝速度测试
48      */
49     public static void main03(String[] args) {
50         int[] array01 = new int[]{01, 02, 03};
51         long begin = System.nanoTime();
52         for (int i = 0; i < 100000000; i++) {
53             int[] array02 = array01.clone();
54             // int[] array02 = new int[array01.length];
55             // System.arraycopy(array01, 0, array02, 0, array01.length);
56         }
57         long end = System.nanoTime();
58         System.out.println(end - begin);
59
60         /*
61         ->输出:
62         使用 array.clone():
63         12566117948
64         使用 System.arraycopy():
65         1488130581
66         */
67     }
68
69     /**
70      * 对象拷贝内容测试
71      */
72     public static void main(String[] args) {
73         Object[] array01 = new Object[]{new Object(), new Object(), new Object()};
74         Object[] array02 = array01.clone();
75         System.out.format("%s->%s\n", array01, Arrays.toString(array01));
76         System.out.format("%s->%s\n", array02, Arrays.toString(array02));
77
78         array02 = new Object[array01.length];
79         System.arraycopy(array01, 0, array02, 0, array01.length);
80         System.out.format("%s->%s\n", array01, Arrays.toString(array01));
81         System.out.format("%s->%s\n", array02, Arrays.toString(array02));
82
83         /*
84         ->输出:
85         [Ljava.lang.Object;@a0864f->[[email protected], [email protected], [email protected]]
86         [Ljava.lang.Object;@d1e233->[[email protected], [email protected], [email protected]]
87         [Ljava.lang.Object;@a0864f->[[email protected], [email protected], [email protected]]
88         [Ljava.lang.Object;@15983b7->[[email protected], [email protected], [email protected]]
89         */
90     }
测试结果:1、拷贝功能:   array.clone 和 System.arraycopy 都可以实现数组引用区的完全复制。对复制后的新数组的引用区进行操作不影响原数组引用区内容   (引用区指的是:对象的指针列表)。2、拷贝速度:    当复制类型无论为对象类型还是基本数据:    System.arraycopy() 的速度都是 array.clone()的9-10倍。3、对象内容拷贝测试:    System.arraycopy() 和 array.clone() 都是引用区拷贝,不拷贝元素对象。

总结:System.arraycopy() 和  array.clone()实现功能一致,但System.arraycopy()更快速,另外System.arraycopy()也经常用于数组扩容。

原文地址:https://www.cnblogs.com/2014fhj/p/8976131.html

时间: 2024-11-17 05:27:28

System.arraycopy 和 Array.clone 的比较的相关文章

java数组的拷贝四种方法:for、clone、System.arraycopy、arrays.copyof

public class ArrayCopy{ public static void main(String []args){ int []a = {1,3,4,5}; toPrint(a); int []aFor=new int[a.length]; //1.for循环复制 System.out.println("===========1.使用for复制"); for(int i=0;i<a.length;i++){ aFor[i]=a[i]; } aFor[2]=10;//改

System.arraycopy()和Arrays.copyOf()的区别

先看看System.arraycopy()的声明: public static native void arraycopy(Object src,int srcPos, Object dest, int destPos,int length); src - 源数组. srcPos - 源数组中的起始位置. dest - 目标数组. destPos - 目标数据中的起始位置. length - 要复制的数组元素的数量. 该方法用了native关键字,说明调用的是其他语言写的底层函数. 再看Arra

java 之System.arraycopy() vs arrays.copyOf()

在java中,数组的复制可以有System.arraycopy与arrays.copyOf()两种选择,下面就详细介绍一下这两种方法的差别: System.arraycopy int[] src = {1,2,3,4,5}; int[] des = new int[10]; System.arraycopy(arr, 0, copied, 1, 5); //5 is the length to copy System.out.println(Arrays.toString(des)); 输出结果

Java数组的复制Arrays.copyOf()和System.arraycopy()函数

public static native void arraycopy(Object src, int srcPos, Object dest, int destPos, int length); arraycopy是个本地方法,无返回值. public static <T,U> T[] copyOf(U[] original, int newLength, Class<? extends T[]> newType) { T[] copy = ((Object)newType ==

System.arraycopy() or Arrays.copyOf()

1. Simple Code Examples System.arraycopy() int[] arr = {1,2,3,4,5}; int[] copied = new int[10]; System.arraycopy(arr, 0, copied, 1, 5);//5 is the length to copy System.out.println(Arrays.toString(copied)); Output: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] [0, 1

Java-Java中System.arraycopy() 和 Arrays.copyOf()两者之间的区别

如果我们想拷贝一个数组,我们可能会使用System.arraycopy()或者Arrays.copyof()两种方式.在这里,我们将使用一个比较简单的示例来阐述两者之间的区别. 1.示例代码: System.arraycopy() int[] arr = {1,2,3,4,5}; int[] copied = new int[10]; System.arraycopy(arr, 0, copied, 1, 5);//5 is the length to copy System.out.print

System.arraycopy方法

数组的复制有多种方法,其中有一种就是System.arraycopy方法,传闻速度也很快. 方法完整签名: public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 参数 @ src -- 这是源数组 @ srcPos -- 这是源数组中的起始位置 @dest -- 这是目标数组 @ destPos -- 这是目标数据中的起始位置  @ length -- 这是一个要复制的

java.lang.System.arraycopy() 与java.util.Arrays.copyOf()的区别

java.lang.System.arraycopy() 与java.util.Arrays.copyOf()的区别 一.java.lang.System.arraycopy() 该方法的声明: /* @param src 源数组 * @param srcPos 源数组中的起始位置 * @param dest 目标数组 * @param destPos 目标数组中的起始位置 * @param length 需要被复制的元素个数 * @exception IndexOutOfBoundsExcep

[转载自百度文库]数组拷贝(System.arraycopy,深度拷贝)--数组

数组拷贝(System.arraycopy,深度拷贝)--数组 [ITjob课程资料] 拷贝数组 数组一旦创建后,其大小不可调整.然而,你可使用相同的引用变量来引用一个全新的数组: int[] myArray = new int [6]; myArray = new int[10]; 在这种情况下,第一个数组被丢弃,除非对它的其它引用保留在其它地方. Java编程语言在System类中提供了一种特殊方法拷贝数组,该方法被称作arraycopy().例如,araycopy可作如下使用: int[]