菜鸟问题,怎么LinkedList比ArrayList添加元素还要慢啊??

问题描述

不是说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在赋值,明显,数组的这种添加性能要优于链表

时间: 2024-09-21 16:35:30

菜鸟问题,怎么LinkedList比ArrayList添加元素还要慢啊??的相关文章

JAVA LinkedList和ArrayList的使用及性能分析_java

第1部分 List概括List的框架图List 是一个接口,它继承于Collection的接口.它代表着有序的队列.AbstractList 是一个抽象类,它继承于AbstractCollection.AbstractList实现List接口中除size().get(int location)之外的函数.AbstractSequentialList 是一个抽象类,它继承于AbstractList.AbstractSequentialList 实现了"链表中,根据index索引值操作链表的全部函数

java中LinkedList和ArrayList性能比对

   代码如下 复制代码 package com.letv.cloud.cdn.jtest;    import java.io.IOException;  import java.util.ArrayList;  import java.util.LinkedList;  import java.util.List;  import java.util.concurrent.TimeUnit;    import org.slf4j.LoggerFactory;    import com.g

Java 容器 &amp; 泛型:二、ArrayList 、LinkedList和Vector比较

一.List回顾 序列(List),有序的Collection,正如它的名字一样,是一个有序的元素列表.确切的讲,列表通常允许满足 e1.equals(e2) 的元素对 e1 和 e2,并且如果列表本身允许 null 元素的话,通常它们允许多个 null 元素.实现List的有:ArrayList.LinkedList.Vector.Stack等.值得一提的是,Vector在JDK1.1的时候就有了,而List在JDK1.2的时候出现,待会我们会聊到ArrayList和Vector的区别.  

Java 集合系列08之 List总结(LinkedList, ArrayList等使用场景和性能分析)

概要 前面,我们学完了List的全部内容(ArrayList, LinkedList, Vector, Stack). Java 集合系列03之 ArrayList详细介绍(源码解析)和使用示例  Java 集合系列04之 fail-fast总结(通过ArrayList来说明fail-fast的原理.解决办法)  Java 集合系列05之 LinkedList详细介绍(源码解析)和使用示例 Java 集合系列06之 Vector详细介绍(源码解析)和使用示例 Java 集合系列07之 Stack

java集合框架05——ArrayList和LinkedList的区别

本文为博主原创文章,转载请注明出处:http://blog.csdn.net/eson_15/article/details/51145788 前面已经学习完了List部分的源码,主要是ArrayList和LinkedList两部分内容,这一节主要总结下List部分的内容. List概括         先来回顾一下List在Collection中的的框架图:     从图中我们可以看出:         1. List是一个接口,它继承与Collection接口,代表有序的队列.       

分析Java中ArrayList与LinkedList列表结构的源码_java

一.ArrayList源码分析(JDK7) ArrayList内部维护了一个动态的Object数组,ArrayList的动态增删就是对这个对组的动态的增加和删除. 1.ArrayList构造以及初始化 ArrayList实例变量 //ArrayList默认容量 private static final int DEFAULT_CAPACITY = 10; //默认空的Object数组, 用于定义空的ArrayList private static final Object[] EMPTY_ELE

ArrayList和LinkedList的区别

一般大家都知道ArrayList和LinkedList的大致区别:1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构.2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针.3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据.    这一点要看实际情况的.若只对单条数据插入或删除,ArrayList的速度反而优于LinkedList.但若是

【java集合系列】--- LinkedList

开篇前言--LinkedList中的基本用法 在前面的博文中,小编介绍List接口中的ArrayList集合,List这个接口,有两个实现类,一个就是ArrayList另一个是LinkedList(链表),这两个类都实现了List接口,so.她们有很多相似的地方.LinkedList和ArrayList一样实现了List接口,但是她执行插入和删除操作时比ArrayList更加高效,因为她是基于链表的,但同时也决定了她在随机访问方面要比ArrayList弱一点.我们通过一系列的小demo来加深对L

java中ArrayList 、LinkList的区别分析_java

1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构.      2.对于随机访问get和set,ArrayList优于LinkedList,因为ArrayList可以随机定位,而LinkedList要移动指针一步一步的移动到节点处.(参考数组与链表来思考)     3.对于新增和删除操作add和remove,LinedList比较占优势,只需要对指针进行修改即可,而ArrayList要移动数据来填补被删除的对象的空间. ArrayList和LinkedL