ArrayList和LinkedList的区别!~

ArrayList是用数组的方式存储的,做查询时效率很高,但做添加和删除的时候(除在它的后面加)当数据量大时(>20万)时效率明显不如LinkedList;
当在数组中间插入数据时它的后面对应的数据都得向后移动,浪费大量时间。
LinkedList是用链表的方式存储。
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,链表比较方便插入和删除操作。
下面是自己验证的一下例子:
public void testList(){
		LinkedList linkedlist = new LinkedList();
		List arraylist = new ArrayList();
		for(int m=0;m<800000;m++){
	        linkedlist.add(m,"a"); 
	    }
		for(int n=0;n<800000;n++){
        	arraylist.add(n, "a");  
	    }
		
		long time3 = new Date().getTime();
		for(int m=0;m<20000;m++){
	        linkedlist.add(m,"a");      //当在800000条数据之前插入20000条数据时,LinkedList只用了468多ms.这就是LinkedList的优势所在
	    }
        long time4 = new Date().getTime();
        System.out.print("batch linkedlist add:");
        System.out.println(time4 - time3);
        for(int n=0;n<20000;n++){
        	arraylist.add(n, "a");  //当在800000条数据之前插入20000条数据时,ArrayList用了19032多ms.时间花费是arraylist的近40倍(视测试时机器性能)
        }
        long time5 = new Date().getTime();
        System.out.print("batch arraylist add:");
        System.out.println(time5 - time4);
	}

希望有帮助!~

猜你喜欢

转载自wangde.iteye.com/blog/1133272