不是说LinkedList添加删除元素比ArrayList开销小吗?? 怎么添加元素反而慢呢??import java.util.ArrayList;
import java.util.LinkedList;
public class AddingGroups { public static void main(String[] args) {
//新建一个LinkedList集合
LinkedList<Integer> linkedList = new LinkedList<>();
//新建一个ArrayList集合
ArrayList<Integer> arrayList = new ArrayList<>();
//记录linkedList添加开始时间
Long statTimeLink = System.currentTimeMillis();
//开始添加元素
for(int i = 0;i<1000000;i++){
     linkedList.add(i);
}
//记录linkedList添加元素结束时间
Long endTimeLink = System.currentTimeMillis();

//计算linkedList添加用的时间
System.out.println("linkedList添加用的时间是"+(endTimeLink - statTimeLink)+"s");

//记录ArrayList添加开始时间
Long statTimeArray = System.currentTimeMillis();
//开始添加元素
for(int i = 0;i<1000000;i++){
arrayList.add(i);

}
//记录ArrayList添加结束时间
Long endTimeArray = System.currentTimeMillis();
//计算arrayList添加用的时间
System.out.println("ArrayList添加用的时间是"+(endTimeArray - statTimeArray)+"s");




}}运行结果:linkedList添加用的时间是1483s
                    ArrayList添加用的时间是437s

解决方案 »

  1.   

    顺序存取,ArrayList 比较快;随机存取,LinkedList比较快。
    楼主的示例中,顺序存取,把LinkedList当做ArrayList来用了,速度自然拼不过ArrayList了。
      

  2.   

    看来API没吃透
      

  3.   

    你随机添加
    for(int i = 0;i<1000000;i++){
            arrayList.add(new Random.next(1000000),i);
    }
      

  4.   

    你试试都换成.add(0, i);
      

  5.   

    这又是渣渣Java入门书干的好事
    目测就是写一句LinkedList添加删除快,ArrayList访问快之类的话误导初学者
    这样含糊其辞还不如不说如果你想知道究竟他们两个在不同情况下谁快谁慢,那请直接看源码,源码看懂了你自然知道答案了,什么叫看懂了?就是当你意识到你对于这个问题写一篇专题文章都不一定讲得清的时候
    如果你只是想知道写代码应该用哪个,那么99%的情况用ArrayList,还有1%的情况是:
    1、超大List,超大指至少十几万个元素,并且还需要频繁添加删除,但不需要频繁访问
    2、较大List,指至少几千个元素,需要频繁向Lis t很靠前的地方添加删除元素,但是很少需要访问List靠中间部分的元素
    3、当你发现ArrayList比LinkedList耗时多一个数量级的时候
      

  6.   

    除非你拼命向头部添加且数据大,否则都是ArrayList快。
    楼上就说得很详细了
      

  7.   

    ArrayList的底层是数组,而LinkList的底层是链表;从ArrayList中随机删除一个对象,后面的数组排序就会朝前移位,这就是开销大的来处;而LinkList,用的是链表,随机删除某一个,就将删除前的一个直接链接删除后的一个,而不要进行移位
      

  8.   

    顺序的话arrayList肯定快,无序的话开销就会非常大
      

  9.   

    直接从底层数据结构分析:   1,Arraylist是可变长的数组,
      

  10.   

    2.LinkList是链表,,,
               链表的话那么  它的插入(给定一个位置)和删除 快,
              数组的话,由于存在 下标,那么他的查询就快点。就你这个题说的话,你每次都添加在   末尾位置,,,那么链表的话还有把整个链表遍历一遍达到末尾位置,才进行添加;
                                                                                                   数组的话,由于存在索引值,所以直接就可以让索引值+1在赋值,明显,数组的这种添加性能要优于  链表
      

  11.   

    慢是因为ArrayList的扩容,但ArrayList又不是每添加一个就扩容一次。
      

  12.   

    我是这么认为的:无序添加的时候,arraylist 通过索引找到要插入的位置,进行插入,然后数组插入位置后面的索引都要发生变化(数据量大的时候开销很大),而linkedlist不同,底层是链表,也就是一个指针指向前面的元素,一个指针指向后面的元素。插入的时候只需要改变两个指针,新增两个指针。你全部插入到最后面的话,arraylist相当于索引不需要变化了,就导致了arraylist插入比linkedlist快的结果。