• Java中ArrayList和LinkedList区别


    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会非常消耗资源,除非位置离头部很近。但是插入和删除元素花费常数时间。

  • 相关阅读:
    换行符 CR
    c# 定义的属性名与保留关键字冲突
    Redis 以window 服务启动
    c# Guid.NewGuid().ToString(format
    select 下拉源动态赋值
    html 控制input标签只能输入数字
    HTTP 错误 500.19
    Android debugger 出现提示Connected to the target VM, address: 'localhost:xxxx', transport: 'socket'
    siege--Web性能压测工具
    python+selenium上传文件注意点
  • 原文地址:https://www.cnblogs.com/huzi007/p/5550440.html
Copyright © 2020-2023  润新知