• 中间插入数据选择ArrayList还是LinkedList?


    今天去面试,提到ArrayList和LinkedList的适用场景时,被问到:如果从中间插入数据时,是选择用ArrayList存储数据还是LinkedList存储数据好呢?

    以前看到过相关的博客,回答了ArrayList效率更高,被追问为什么,然后我就一时懵逼,支支吾吾答不出来,面试官问LinkedList只是每次从两端向中间进行指针访问,找到位置后直接插入,相比于ArrayList每次插入都要将后续的元素后移并且还可能发生扩容操作,应该是LinkedList的效率更高啊???(弟弟的我只能回答不知道)

    直接上测试:

    /**
     * @author liuyiyuan
     *
     * 结果比较:
     *    1、先执行ArrayList 再执行LinkedList
     *          100000(10万条插入)   ArrayList: 0.247     LinkedList:6.385
     *          200000(20万条插入)   ArrayList: 0.954     LinkedList:36.629
     *          1000000(100万条插入)   ArrayList已经跑不出来了超过20分钟了
     *
     *    2、先执行LinkedList 再执行ArrayList
     *          100000(10万条插入)   ArrayList: 0.205     LinkedList:6.344
     *          200000(20万条插入)   ArrayList: 0.925     LinkedList:34.366
     */
    public class ArrayListAndLinkedListTest {
    
        public static void main(String[] args) {
            int n = 200000; // 100000次 1000000次
    
    //        long start2 = System.currentTimeMillis();
    //        timeTest2(n);
    //        long end2 = System.currentTimeMillis();
    //        System.out.println("LinkedList中间插入"+n+"数据耗时:"+(end2-start2)/1000D+" 秒");
    
            long start1 = System.currentTimeMillis();
            timeTest1(n);
            long end1 = System.currentTimeMillis();
            System.out.println("ArrayList中间插入"+n+"数据耗时:"+(end1-start1)/1000D+" 秒");
    
            long start2 = System.currentTimeMillis();
            timeTest2(n);
            long end2 = System.currentTimeMillis();
            System.out.println("LinkedList中间插入"+n+"数据耗时:"+(end2-start2)/1000D+" 秒");
        }
    
        public static void timeTest1(int n){
            ArrayList<Integer> a = new ArrayList<>();
            for(int i=0; i<n; i++){
                a.add(i/2, i);
            }
        }
    
        public static void timeTest2(int n){
            LinkedList<Integer> a = new LinkedList<>();
            for(int i=0; i<n; i++){
                a.add(i/2, i);
            }
        }
    }

    结果确实是ArrayList效率更高,但是为什么还是不知道????该怎么解释。。。。

  • 相关阅读:
    Centos7.2升级内核至3.10.0-957【转】
    部署一套完整的Kubernetes高可用集群(上)【转】
    Nginx配置中一个不起眼字符"/"的巨大作用,失之毫厘谬以千里【转】
    使用vmware搭建k8s集群【转】
    nginx的request body日志格式配置
    nginx漏洞修复:SSL/TLS 服务器瞬时 Diffie-Hellman 公共密钥过弱【原理扫描】【转】
    nginx:[warn] the "ssl" directive is deprecated, use the "listen ... ssl" directive instead
    linux系统删除分区
    Linux用户锁定、解锁及锁定查看
    innobackupex远程备份【转】
  • 原文地址:https://www.cnblogs.com/liuyiyuan/p/13829018.html
Copyright © 2020-2023  润新知