这一章节我们来讨论一下Java提供的数组的实用功能。
1.复制
我们下面来比较一下System.arraycopy和for
package com.ray.ch14; import java.util.Arrays; public class Test { public static void main(String[] args) { int[] a = new int[10000000]; Arrays.fill(a, 1); int[] b = new int[10000000]; long startTime = System.currentTimeMillis(); System.arraycopy(a, 0, b, 0, a.length); long endTime = System.currentTimeMillis(); System.out.println(endTime - startTime); System.out.println("-------------"); b = new int[10000000]; startTime = System.currentTimeMillis(); for (int i = 0; i < a.length; i++) { b[i] = a[i]; } endTime = System.currentTimeMillis(); System.out.println(endTime - startTime); } }
6
-------------
10
从输出的数据看见,for比System.arraycopy要慢一些。当然,这种慢是忽略不计的,上面只是实验而已。
不过我们需要注意:
(1)使用System.arraycopy两个数组必须是同一个类型
(2)数组的复制里面,如果是基本类型,则复制值,如果是对象,则复制引用(浅复制)
2.数组的对比
需要满足两个条件:
(1)对应元素需要一致
(2)元素个数需要一致
package com.ray.ch14; import java.util.Arrays; public class Test { public static void main(String[] args) { int[] a = new int[5]; Arrays.fill(a, 1); int[] b = new int[5]; Arrays.fill(b, 1); int[] c = new int[5]; Arrays.fill(c, 2); int[] d = new int[6]; Arrays.fill(d, 1); System.out.println(Arrays.equals(a, b)); System.out.println(Arrays.equals(a, c));// 元素不一致 System.out.println(Arrays.equals(a, d));// 元素个数不一致 } }
true
false
false
下面举一些反例:
package com.ray.ch14; import java.util.Arrays; public class Test { public static void main(String[] args) { int[] a = new int[] { 1, 2, 3, 4, 5 }; int[] b = new int[] { 5, 4, 3, 2, 1 }; System.out.println(Arrays.equals(a, b)); } }
false
package com.ray.ch14; import java.util.Arrays; public class Test { public static void main(String[] args) { int[] a = new int[] { 1, 2, 3, 4, 5 }; int[] b = new int[] { 1, 2, 3, 4, 5, 6 }; System.out.println(Arrays.equals(a, b)); } }
输出:
false
上面的例子是基础类型的,下面是对象:package com.ray.ch14; import java.util.Date; import java.util.Arrays; public class Test { public static void main(String[] args) { MyClass[] myClasses1 = new MyClass[2]; MyClass myClass1 = new MyClass(); MyClass myClass2 = new MyClass(); MyClass myClass3 = new MyClass(); MyClass myClass4 = new MyClass(); myClass1.setDate(new Date()); myClass2.setDate(new Date()); myClass3.setDate(new Date()); myClass4.setDate(new Date()); myClasses1[0] = myClass1; myClasses1[1] = myClass2; MyClass[] myClasses2 = new MyClass[2]; myClasses2[0] = myClass1; myClasses2[1] = myClass2; System.out.println(Arrays.equals(myClasses1, myClasses2)); myClasses2[0] = myClass3; myClasses2[1] = myClass4; System.out.println(Arrays.equals(myClasses1, myClasses2)); } } class MyClass { private Date date; public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } }
true
false
总结:这一章节主要讨论了Java提供的数组的实用功能。
这一章节就到这里,谢谢。
-----------------------------------
目录