1.ArrayList和LinkedList是什么?
在我看来,要想搞清楚ArrayList和LinkedList有什么区别,首先一定得要知道这两个东西到底是什么。因为在我看来,通常拿来被比较有区别的东西,它们大体上一定存在很多相似的地方。为了剖析本质,我们直接看看它们的源码声明。
Arraylist: LinkedList:
可以看出ArrayList和LinkedList都是List接口下的实现类,而List接口可以说是集合类中最常用的接口了,它是一个元素有序、可以重复、可以为null的集合。而且List接口的元素,都可以直接通过下标索引获取。既然如此,那么说明ArrayList和LinkedList都具有上述的功能,那他们使用起来的效率到底有什么区别呢?
2.ArrayList和LinkedList性能比较
1.插入效率比较
因为上面我们已经提到过这两者都是主要用来存储元素的集合类,那我们可以使用较大的数据量,来测试一下它们插入的效率如何
//插入到头部
public static void main(String[] args) {
ArrayList<Integer> list1 = new ArrayList<>();
LinkedList<Integer> list2 = new LinkedList<>();
long time1 = System.currentTimeMillis();
for (int i = 0; i < 1000000; i++) {
list1.add(0,i);
}
long time2 = System.currentTimeMillis();
for (int i = 0; i < 1000000; i++) {
list2.add(0,i);
}
long time3 = System.currentTimeMillis();
//ArrayList的插入时间
System.out.println(time2-time1);//58746
//LinkedList的插入时间
System.out.println(time3-time2);//124
}
//插入到尾部
public static void main(String[] args) {
ArrayList<Integer> list1 = new ArrayList<>();
LinkedList<Integer> list2 = new LinkedList<>();
long time1 = System.currentTimeMillis();
for (int i = 0; i < 1000000; i++) {
list1.add(i);
}
long time2 = System.currentTimeMillis();
for (int i = 0; i < 1000000; i++) {
list2.add(i);
}
long time3 = System.currentTimeMillis();
//ArrayList的插入时间
System.out.println(time2-time1);//23
//LinkedList的插入时间
System.out.println(time3-time2);//140
}
大家发现没有,当插入100万个元素到头部时,LinkedList的速率竟然是ArrayList五千倍之多,当我们插入100万个元素到尾部时,但是又发现ArrayList的速率比LinkedList还快,这是为什么呢?
如需转载,请注明文章出处和来源网址:http://www.divcss5.com/html/h64877.shtml