zoukankan      html  css  js  c++  java
  • Java中ArrayList和LinkedList区别

    转载:https://www.cnblogs.com/huzi007/p/5550440.html

    ArrayList和LinkedList的大致区别如下:
    1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 
    2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。 
    3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。 

    上代码:

    复制代码
     1     static final int N=50000;
     2     static long timeList(List list){
     3         long start=System.currentTimeMillis();
     4         Object o = new Object();
     5         for(int i=0;i<N;i++) {
     6             list.add(0, o);
     7         }
     8         return System.currentTimeMillis()-start;
     9     }
    10     static long readList(List list){
    11         long start=System.currentTimeMillis();
    12         for(int i=0,j=list.size();i<j;i++){
    13 
    14         }
    15         return System.currentTimeMillis()-start;
    16     }
    17 
    18     static List addList(List list){
    19         Object o = new Object();
    20         for(int i=0;i<N;i++) {
    21             list.add(0, o);
    22         }
    23         return list;
    24     }
    25     public static void main(String[] args) {
    26         System.out.println("ArrayList添加"+N+"条耗时:"+timeList(new ArrayList()));
    27         System.out.println("LinkedList添加"+N+"条耗时:"+timeList(new LinkedList()));
    28 
    29         List list1=addList(new ArrayList<>());
    30         List list2=addList(new LinkedList<>());
    31         System.out.println("ArrayList查找"+N+"条耗时:"+readList(list1));
    32         System.out.println("LinkedList查找"+N+"条耗时:"+timeList(list2));
    33     }
    复制代码

    当我们在集合中装5万条数据,测试运行结果如下:

    显然我们可以看出ArrayList更适合读取数据,linkedList更多的时候添加或删除数据。

    ArrayList内部是使用可増长数组实现的,所以是用get和set方法是花费常数时间的,但是如果插入元素和删除元素,除非插入和删除的位置都在表末尾,否则代码开销会很大,因为里面需要数组的移动。
    LinkedList是使用双链表实现的,所以get会非常消耗资源,除非位置离头部很近。但是插入和删除元素花费常数时间。

  • 相关阅读:
    (C/C++学习)6.数组指针和指针数组
    (C/C++学习)5.C++中的虚继承-虚函数-多态解析
    (C/C++学习)4.C++类中的虚函数表Virtual Table
    (C/C++学习)3.C++中cin的成员函数(cin.get();cin.getine()……)
    (C/C++学习)2.C语言中文件流操作基本函数总结
    关于for,while与do while
    计算机算法-C语言-统计字母数字个数解
    计算书费
    Truncate table
    sqlserver 在脚本中,为所有字符前没有N标记的字符增加N
  • 原文地址:https://www.cnblogs.com/renjiaqi/p/10088877.html
Copyright © 2011-2022 走看看