这一章节我们再次深入的对比数组与容器。
数组与容器主要集中在三个方面:效率、类型、基础类型。我们可以从三方面做出对比。
1.效率
这里的下来是指add和get 的速度
下面以add为例:
package com.ray.ch13;
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
Integer zero = new Integer(0);
ArrayList<Integer> list = new ArrayList<Integer>();
long startTime = System.currentTimeMillis();
for (int i = 0; i < 1000000; i++) {
list.add(zero);
}
long endTime = System.currentTimeMillis();
System.out.println(endTime - startTime);
Integer[] integers = new Integer[1000000];
startTime = System.currentTimeMillis();
for (int i = 0; i < 1000000; i++) {
integers[i] = zero;
}
endTime = System.currentTimeMillis();
System.out.println(endTime - startTime);
System.out.println("----------------");
Integer[] integers2 = new Integer[1000000];
startTime = System.currentTimeMillis();
for (int i = 0; i < 1000000; i++) {
integers2[i] = zero;
}
endTime = System.currentTimeMillis();
System.out.println(endTime - startTime);
ArrayList<Integer> list2 = new ArrayList<Integer>();
startTime = System.currentTimeMillis();
for (int i = 0; i < 1000000; i++) {
list2.add(zero);
}
endTime = System.currentTimeMillis();
System.out.println(endTime - startTime);
}
}
输出:
26
2
----------------
2
29
从结果可以看见,明显是数组的快很多,但是有一点需要注意的是,我们上面的代码要排除两点,一是放入的对象要先建立好,二是容器或者数组也要先建立好,单纯的对比add的速度,不然会有偏差。笔者在这里饶了20几分钟才绕出来,才得到最后想要的结果。
效率是数组胜出,但是数组牺牲了扩容的能力;容器虽然败了,但是它得到的是扩容的能力,就是因为需要这个扩容能力,才牺牲了效率。
但是,对于普通的应用,只有几十个或者几百个对象的操作,推荐容器,因为这里面的效率损失完全可以忽略不计。
2.类型
在前面我们已经举过相关的例子,数组是类型安全的,容器有可能类型不安全。
例子:
package com.ray.ch13;
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add(1);
list.add("1");
Integer[] integers = new Integer[10];
integers[0] = 0;
// integers[1]="1";//error
}
}
3.基础类型
数组支持基础类型,而容器不支持。
例子:
package com.ray.ch13;
public class Test {
public static void main(String[] args) {
// ArrayList<int> list = new ArrayList();//error
int[] arr = new int[10];
}
}
4.总的来说
笔者还是推荐使用容器,因为java的容器已经具备数组的所有操作,而且还做出了扩展,这个对于编程来说非常重要,降低了编程的复杂程度。
当然,如果是上面的实验性的东西,另当别论。
总结:我们上面从三方面对比了数组和容器,以及举例说明。
这一章节就到这里,谢谢。
-----------------------------------