我们知道数组是以一块连续内存区来保存所有的数组元素,所以数组在随机访问时性能最好。所有的内部以数组作
为底层实现的集合在随机访问时性能较好;而内部以链表作为底层实现的集合在执行插入、删除操作时性能较好;
进行迭代操作时,以链表作为底层实现的集合比以数组作为底层实现的集合性能好。
我们来看以下程序:
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 情绪控_
原文:http://blog.csdn.net/hai_qing_xu_kong/article/details/44136165