List接口
list主要有三种实现:ArrayList,Vector和LinkedList,其中ArrayList和Vector使用了数组实现,LinkedList使用了循环双向链表数据结构。
1.插入数据比较
在队尾增加数据,ArrayList相对较快,LinkedList每次都要新增一个Entry对象,较慢。
在队中插入数据,LinkedList较快,ArrayList要复制数组。
2.删除数据比较
ArrayList的实现,将删除位置后面的元素往前移动一位,最有一位元素置为null。
LinkedList要循环找到要删除的数据。如果删除的位置处于List的前半段,从前往后查找,如果删除的位置处于List的后半段,从后往前找。
所以ArrayList删除最后的数据比较快,LinkedList删除两端的数据比较快,删除中间的数据比较慢。
3.遍历LinkedList
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
long start = System.currentTimeMillis();
List<String> list =
new
LinkedList<String>();
for
(int i=0; i< 110000; i++){
list.add(0, String.valueOf(i));
}
long end = System.currentTimeMillis();
System.out.println(end-start);
long start1 = System.currentTimeMillis();
for
(int i=0; i< 11000; i++){
list.get(i);
}
long end1 = System.currentTimeMillis();
System.out.println(
"for循环时间:"
+(end1-start1));
long start3 = System.currentTimeMillis();
for
(String string : list) {
}
long end3 = System.currentTimeMillis();
System.out.println(
"forEach循环时间:"
+(end3-start3));
long start2 = System.currentTimeMillis();
for
(Iterator<String> it = list.iterator(); it.hasNext();){
String a = it.next();
}
long end2 = System.currentTimeMillis();
System.out.println(
"迭代器循环时间:"
+(end2-start2));
|
1
2
3
4
|
25
for
循环时间:181
forEach循环时间:4
迭代器循环时间:3
|