
已解决问题
谷歌8979tty用户在2019.03.10提交了关于“花生遭哄抢arraylist和linkedlist重大区别?”的提问,欢迎大家涌跃发表自己的观点。目前共有1个回答,最后更新于2025-03-04T06:55:32。希望大家能够帮助她。详细问题描述及疑问:期待您的答案,你就是当代的活雷锋,太感谢了 !
详细问题描述及疑问:期待您的答案,你就是当代的活雷锋,太感谢了 !
1.ArrayList是实现了基于动态数组的**结构,而Lin
2.对于随机访问get和set,ArrayList要优于LinkedList,因为Li
3.对于添加和删除操作
研究源码可以看出,
ArrayList想要
测试:
i
importj**a.util.Collections;
impo
importj**
/*
*@description测试ArrayList和LinkedLis
*@es
*/
publicclassArrayOrLink
staticList<Integer>array=newArrayList<Integer>();
staticLis
publicstaticvo
/
for(inti
arr
linked.add(i);
}
//获得两者随机访问的时间
System.out.printl
System.out
//获得两者
System.ou
System.out.println("linkedinserttime:"+insertTime(linked));
}
publicstaticlonggetTime(List<Integer>list){
longtime=System.currentTimeMillis();
for(inti=0;i<10000;i++){
intindex=Collections.binarySearch(list,list.get(i));
if(index!=i){
System.out.println("ERROR!");
}
}
returnSystem.currentTimeMillis()-time;
}
//插入**
publicstaticlonginsertTime(List<Integer>list){
/*
*插入的**量和插入的位置是决定两者性能的主要方面,
*我们可以通过修改这两个**,来测试两者的性能
*/
long**m=10000;//表示要插入的**量
intindex=1000;//表示从哪个位置插入
longtime=System.currentTimeMillis();
for(inti=1;i<**m;i++){
list.add(index,i);
}
returnSystem.currentTimeMillis()-time;
}
}
主要有两个因素决定他们的效率,插入的**量和插入的位置。我们可以在程序里改变这两个因素来测试它们的效率。
当**量较小时,测试程序中,大约小于30的时候,两者效率差不多,没有显著区别;当**量较大时,大约在容量的1/10处开始,LinkedList的效率就开始没有ArrayList效率高了,特别到一半以及后半的位置插入时,LinkedList效率明显要低于ArrayList,而且**量越大,越明显。比如我测试了一种情况,在index=1000的位置(容量的1/10)插入10000条**和在index=5000的位置以及在index=9000的位置插入10000条**的运行时间如下:
在index=1000出插入结果:
arraytime:4
linkedtime:240
arrayinserttime:20
linkedinserttime:18
在index=5000处插入结果:
arraytime:4
linkedtime:229
arrayinserttime:13
linkedinserttime:90
在index=9000处插入结果:
arraytime:4
linkedtime:237
arrayinserttime:7
linkedinserttime:92
从运行结果看,LinkedList的效率是越来越差。
所以当插入的**量很小时,两者区别不太大,当插入的**量大时,大约在容量的1/10之前,LinkedList会优于ArrayList,在其后就劣与ArrayList,且越靠近后面越差。所以个人觉得,一般首选用ArrayList,由于LinkedList可以实现栈、队列以及双端队列等**结构,所以当特定需要时候,使用LinkedList,当然咯,**量小的时候,两者差不多,视具体情况去选择使用;当**量大的时候,如果只需要在靠前的部分插入或删除**,那也可以选用LinkedList,反之选择ArrayList反而效率更高。