问题描述
不是说LinkedList添加删除元素比ArrayList开销小吗??怎么添加元素反而慢呢??importjava.util.ArrayList;importjava.util.LinkedList;publicclassAddingGroups{publicstaticvoidmain(String[]args){//新建一个LinkedList集合LinkedList<Integer>linkedList=newLinkedList<>();//新建一个ArrayList集合ArrayList<Integer>arrayList=newArrayList<>();//记录linkedList添加开始时间LongstatTimeLink=System.currentTimeMillis();//开始添加元素for(inti=0;i<1000000;i++){linkedList.add(i);}//记录linkedList添加元素结束时间LongendTimeLink=System.currentTimeMillis();//计算linkedList添加用的时间System.out.println("linkedList添加用的时间是"+(endTimeLink-statTimeLink)+"s");//记录ArrayList添加开始时间LongstatTimeArray=System.currentTimeMillis();//开始添加元素for(inti=0;i<1000000;i++){arrayList.add(i);}//记录ArrayList添加结束时间LongendTimeArray=System.currentTimeMillis();//计算arrayList添加用的时间System.out.println("ArrayList添加用的时间是"+(endTimeArray-statTimeArray)+"s");}}运行结果:linkedList添加用的时间是1483sArrayList添加用的时间是437s
解决方案
解决方案二:
你这是按顺序加的。每次都加在后面。人家说的是在随机位置加。
解决方案三:
顺序存取,ArrayList比较快;随机存取,LinkedList比较快。楼主的示例中,顺序存取,把LinkedList当做ArrayList来用了,速度自然拼不过ArrayList了。
解决方案四:
看来API没吃透
解决方案五:
你随机添加for(inti=0;i<1000000;i++){arrayList.add(newRandom.next(1000000),i);}
解决方案六:
引用2楼magi1201的回复:
顺序存取,ArrayList比较快;随机存取,LinkedList比较快。楼主的示例中,顺序存取,把LinkedList当做ArrayList来用了,速度自然拼不过ArrayList了。
就是这样的问题,拿路虎跟卡车比载运量。。。。。
解决方案七:
你试试都换成.add(0,i);
解决方案八:
引用5楼csucaicai的回复:
Quote: 引用2楼magi1201的回复:
顺序存取,ArrayList比较快;随机存取,LinkedList比较快。楼主的示例中,顺序存取,把LinkedList当做ArrayList来用了,速度自然拼不过ArrayList了。就是这样的问题,拿路虎跟卡车比载运量。。。。。
这个形容有点吊
解决方案九:
我居然看不懂你们在说什么看来我还是小白啊
解决方案十:
真欢乐,又长知识又娱乐。
解决方案十一:
真欢乐,又长知识又娱乐。
解决方案十二:
解决方案十三:
这又是渣渣Java入门书干的好事目测就是写一句LinkedList添加删除快,ArrayList访问快之类的话误导初学者这样含糊其辞还不如不说如果你想知道究竟他们两个在不同情况下谁快谁慢,那请直接看源码,源码看懂了你自然知道答案了,什么叫看懂了?就是当你意识到你对于这个问题写一篇专题文章都不一定讲得清的时候如果你只是想知道写代码应该用哪个,那么99%的情况用ArrayList,还有1%的情况是:1、超大List,超大指至少十几万个元素,并且还需要频繁添加删除,但不需要频繁访问2、较大List,指至少几千个元素,需要频繁向Lis t很靠前的地方添加删除元素,但是很少需要访问List靠中间部分的元素3、当你发现ArrayList比LinkedList耗时多一个数量级的时候
解决方案十四:
除非你拼命向头部添加且数据大,否则都是ArrayList快。楼上就说得很详细了
解决方案十五:
学习了哈哈
解决方案:
ArrayList的底层是数组,而LinkList的底层是链表;从ArrayList中随机删除一个对象,后面的数组排序就会朝前移位,这就是开销大的来处;而LinkList,用的是链表,随机删除某一个,就将删除前的一个直接链接删除后的一个,而不要进行移位
解决方案:
最好的方式其实是看源码,当你把源码都吃透了之后,你就知道为什么了.还有看看数据结构相关的知识。
解决方案:
改是看源码的时候了,
解决方案:
顺序的话arrayList肯定快,无序的话开销就会非常大
解决方案:
书上说的是算法的平均值
解决方案:
直接从底层数据结构分析:1,Arraylist是可变长的数组,
解决方案:
2.LinkList是链表,,,链表的话那么它的插入(给定一个位置)和删除快,数组的话,由于存在下标,那么他的查询就快点。就你这个题说的话,你每次都添加在末尾位置,,,那么链表的话还有把整个链表遍历一遍达到末尾位置,才进行添加;数组的话,由于存在索引值,所以直接就可以让索引值+1在赋值,明显,数组的这种添加性能要优于链表