• 中间插入数据选择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效率更高,但是为什么还是不知道????该怎么解释。。。。

  • 相关阅读:
    Servlet总结06——servlet过滤器
    jdbc 事务及事务隔离
    集群中几种session同步解决方案的比较[转]
    Servlet总结05——servlet监听器
    Servlet总结(系列文章)
    Eclipse导入Tomcat源码
    Servlet总结02——请求转发
    Servlet总结01——servlet的主要接口、类
    [ lucene其他 ] 几种常见的基于Lucene的开源搜索解决方案对比[转]
    Servlet总结04——注意Servlet单实例的线程安全性
  • 原文地址:https://www.cnblogs.com/liuyiyuan/p/13829018.html
Copyright © 2020-2023  润新知