原创

Java学习笔记31

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/GULINHAI12/article/details/44136165

我们知道数组是以一块连续内存区来保存所有的数组元素,所以数组在随机访问时性能最好。所有的内部以数组作


为底层实现的集合在随机访问时性能较好;而内部以链表作为底层实现的集合在执行插入、删除操作时性能较好;


进行迭代操作时,以链表作为底层实现的集合比以数组作为底层实现的集合性能好。


我们来看以下程序:

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  情绪控_ 


文章最后发布于: 2015-03-08 20:33:53
展开阅读全文
0 个人打赏

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览