ArrayList和LinkedList的区别
的有关信息介绍如下:一般大家都知道ArrayList和LinkedList的大致区别:
1.ArrayLis来自t是实现了基于动态数组的数氢责众针胜检英河叶真据结构,LinkedList基于链表的数据结构。
2.对于随机访问get和set,ArrayList觉得优于Li只结菜nkedList,因么为LinkedList要移动指针。
3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
360问答这一点要看实际情况的。作若只对单条数据插入或删除,ArrayList的速度反而优于LinkedList变决剧景。但若是批量随机的插入删除数冲额月王配据,LinkedList的速度大大优于ArrayList.因为ArrayList每插入一条数据,要移动插入点及之后的所有振静命日案河祖势烧数据。这一点我做了实验。在分别有200000条“记录”的ArrayList和LinkedList的首位插入20000条数据,Lin垂服宁后kedList耗时约是ArrayList的20分之1。
for(intm=0;m<20000;m++){
***.add(口观m,null);//当在200000条数据之前插入20000条数据时,LinkedList只用了1125多ms.这就是LinkedList的优势所在
}
longtime4=newDte().getTime();
system.***.print("batchlinkedlist镇队有守名斤至于者add:");
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,lastIndexOf,contains等,两者差不多。
5.随机查找指定节点的圆必晶花护非阿继刑序蛋操作get,ArrayList速度要快于LinkedList.
这里只是理论上分析,事实上也不一定,ArrayL治京如ist在末尾插入和删除数据的话,速度反而比L亲两迫击胶inkedList需换啊要快。我做过一个插入和删除200000条数据的试验。
longtime才育七为三丝天持乙鸡1=newDate().getTime();
Strings1=(String)***.get(100000);//总记录200000,linkedlist加载第100000条数据耗时15~32ms不等
longtime2=new呼群养按杂概Date().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