我们知道数组是以一块连续内存区来保存所有的数组元素,所以数组在随机访问时性能最好。所有的内部以数组作
为底层实现的集合在随机访问时性能较好;而内部以链表作为底层实现的集合在执行插入、删除操作时性能较好;
进行迭代操作时,以链表作为底层实现的集合比以数组作为底层实现的集合性能好。
我们来看以下程序:
public class Main {
public static void main(String[] args) {
ArrayList array_list=new ArrayList();
for(int i=0;i<3333333;i++){
array_list.add(i);
}
LinkedList linked_list=new LinkedList();
for(int i=0;i<3333333;i++){
linked_list.add(i);
}
long iterator_start1=System.currentTimeMillis();
for(int i=0;i<10000;i++){
array_list.get(i);
}
System.out.println("使用get()方法遍历ArrayList集合的元素所需时间:"+(System.currentTimeMillis()-iterator_start1));
long linked_iterator_start1=System.currentTimeMillis();
for(int i=0;i<10000;i++){
linked_list.get(i);
}
System.out.println("使用get()方法遍历LinkedList集合的元素所需时间:"+(System.currentTimeMillis()-linked_iterator_start1));
Iterator array_list_iterator=array_list.iterator();
long iterator_start=System.currentTimeMillis();
while(array_list_iterator.hasNext()){
array_list_iterator.next();
}
System.out.println("迭代ArrayList集合的元素所需时间:"+(System.currentTimeMillis()-iterator_start));
Iterator linked_list_iterator=linked_list.iterator();
long linked_iterator_start=System.currentTimeMillis();
while(linked_list_iterator.hasNext()){
linked_list_iterator.next();
}
System.out.println("迭代LinkedList集合的元素所需时间:"+(System.currentTimeMillis()-linked_iterator_start));
long arraylist_remove=System.currentTimeMillis();
array_list.remove(34567);
System.out.println("ArrayList删除集合元素所需时间:"+(System.currentTimeMillis()-arraylist_remove));
long linkedlist_remove=System.currentTimeMillis();
linked_list.remove(34567);
System.out.println("LinkedList删除集合元素所需时间:"+(System.currentTimeMillis()-linkedlist_remove));
long arraylist_add=System.currentTimeMillis();
array_list.add(23456,"a");
System.out.println("ArrayList插入集合元素所需时间:"+(System.currentTimeMillis()-arraylist_add));
long linkedlist_add=System.currentTimeMillis();
linked_list.add(23456, "a");
System.out.println("LinkedList插入集合元素所需时间:"+(System.currentTimeMillis()-linkedlist_add));
}
}
输出结果:
使用get()方法遍历ArrayList集合的元素所需时间:0
使用get()方法遍历LinkedList集合的元素所需时间:1806
迭代ArrayList集合的元素所需时间:61
迭代LinkedList集合的元素所需时间:187
ArrayList删除集合元素所需时间:10
LinkedList删除集合元素所需时间:2
ArrayList插入集合元素所需时间:9
LinkedList插入集合元素所需时间:2
从上面的程序中可以看出:
(1)分别使用LinkedList和ArrayList来遍历集合元素所花费的时间差别非常大,因此当我们要去遍历List集合元素
时,使用ArrayList来遍历性能会好很多,对于LinkedList推荐使用迭代器来遍历集合元素。
(2)当我们需要频繁的执行插入、删除集合元素时,应该使用LinkedList集合,因为ArrayList集合需要经常重写分配
内部数组的大小,其时间开销比较大(当然这里说的是频繁,在实际开发中如果用的是ArrayList集合,执行插入、删
除不是很频繁的话,可以使用ArrayList)。
转载请注明出处:http://blog.csdn.net/hai_qing_xu_kong/article/details/44136165 情绪控_