您的位置首页百科问答

ArrayList和LinkedList的区别

ArrayList和LinkedList的区别

的有关信息介绍如下:

ArrayList和LinkedList的区别

一般大家都知道ArrayList和LinkedList的大致区别:

1.ArrayLi来自st是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。

2.对于随机访问橘败get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。

3.对于新增和删除操作add和remove,Line360问答dList比较占优势,因始犯系研件磁扬血为ArrayList要移动数据。

这一点要看实际情况的。若只对单条数据插入或删除,ArrayList的速度反而优于Lin达待按务顾解没雷黑kedList。但若是批量随者二买司状视机的插入删除数据例几磁,LinkedLis入t的速度大大优于ArrayList.因为ArrayList每插入一条数据,要移动插入点及之后的所有数据。这一点我做了实验。在分别有200000条“记录美天加”的ArrayList和LinkedLi计修st的首位插入20000条数据,LinkedList耗时约是ArrayList的20分之1。

for(intm=0;m<20000;m++){

***.add(m,nul龙投l);//当在200000条数据之前插入20000条数据时,书雷古绝绍井LinkedList只用了1125多ms.这就是LinkedList的优亏哗势所在

}

longtime4=newDte().getTime();

system.***.print("batchlinkedlistadd:");

system.***.println(time4-time3);

for(intn=0;n<20000;n++){

***.add(n,null);//当在200000条数据之前插统棉族阶助了春宣校入20000条数据热面非情落活难时,ArrayList用了18375多ms.考略划构欢知倍时间花费是arraylist的近20倍(视测试时机器性能)

}

longtime5=newDate().getTime();

system.***.print("batcharraylistadd:");

system.***.println(time5-time4);

4.查找操作indexOf,lastIn落力立力电玉四dexOf,contains门况注清场身黄站盟把守等,两者差不多。

5.随机查找指定节点的操作get,ArrayList速度要快于LinkedList.

这里只是理论上分析,事实远销庆证上也不一定,ArrayList在末尾插入和删除数据的话,速度反而比LinkedList要快。我做过一个插入和删除200000条数据的试验。

longtime1=newDate()技.getTime();

Strings1=(String)***.get(100000);//总记录200000,linkedlist加载第100000条数据耗时15~32ms不等

longtime2=newDate().getTime();

system.***.println(time2-time1);

Strings2=(String)***.get(100000);//总记录200000,linkedlist加载第100000条数据耗时0ms

longtime3=newDate().getTime();

system.***.println(time3-time2);

/*分别insert200000条数据到linkedlist和arraylist

*由于是在末尾插入圆空颤数据,arraylist的速度比linkedlist的速度反而要快

*/

publicstaticvoidinsertList(LinkedListlinklist,ArrayListarraylist){

longtime1=newDate().getTime();

system.***.println(time1);

for(inti=0;i<200000;i++){

***.add(i,"linklist"+i);

}

longtime2=newDate().getTime();

system.***.println(time2-time1);

for(intj=0;j<200000;j++){

***.add(j,"arraylist"+j);

}

longtime3=newDate().getTime();

system.***.println(time3-time2);

}

/*deletelinkedlist和arraylist中的200000条数据

*由于是在末尾删除数据,arraylist的速度比linkedlist的速度反而要快

*/

publicstaticvoiddeleteList(LinkedListlinklist,ArrayListarraylist){

longtime1=newDate().getTime();

system.***.println(time1);

for(inti=199999;i>=0;i--){

***.remove(i);

}

longtime2=newDate().getTime();

system.***.println(time2-time1);

for(intj=199999;j>=0;j--){

***.remove(j);

}

longtime3=newDate().getTime();

system.***.println(time3-time2);

}

publicstaticvoidmain(Stringargs[]){

LinkedListlinkedlist=newLinkedList();

ArrayListarraylist=newArrayList();

insertList(linkedlist,arraylist);

//以下代码省略

插入:

LinkedList578ms

ArrayList437ms

删除:

LinkedList31ms

ArrayList16ms