这一章节我们来讨论一下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提供的数组的实用功能。
这一章节就到这里,谢谢。
-----------------------------------