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