• (四)循环队列 VS 数组队列 (效率对比)


    目录


    背景

    各自完成插入 10万、20万 条随机数,然后再将这些随机数出队列 ;


    测试代码

    
    /**
    * 测试速度
    */
     public String testSpeed(Queue<Integer> queue, int num) {
            long start = System.currentTimeMillis();
            Random random = new Random(47);
            for (int i = 0; i < num; i++) {
                queue.enQueue(random.nextInt(num));
            }
            for (int i = 0; i < num; i++) {
                queue.deQueue();
            }
    
            long end = System.currentTimeMillis();
            return (end - start) / 1000.0 + " s";
        }
    
        @Test
        public void test() {
    //        十万、二十万的数据
            int num = 200000;
            ArrayQueue<Integer> arrayQueue = new ArrayQueue();
            LoopQueue<Integer> loopQueue = new LoopQueue();
    
            // 十万测试的时间: 16.374 s     |  二十万测试的时间: 63.724 s
            System.out.println(testSpeed(arrayQueue, num));
            // 十万测试的时间: 0.085 s 、   |  二十万测试的时间: 0.128 s
            System.out.println(testSpeed(loopQueue, num));
    
        }

    结果

    从打印的时间看,二者的差距是 天壤之别

    循环队列 在完成 10万、20万 数据 入列、出列的时候,均在 1 s 之内 ;

    测试 二百万 的时间是 0.8 s二千万 数据,时间在 28 s


    数组队列 在完成 10万、20万 数据 入列、出列的时候,分别使用 16 s64 s

    二百万二千万,我没测试;但是,我测试 一百万 我等了 17 分钟,没跑完,然后我结束了运行,二千万的数据 ,估计得按 小时 算 ;


    备注:我的 CPUi7-4710mq ,具体测试,跟 CPU 型号有关 ;


    链表

    之前实现的 动态数组队列 其实本质上都是静态的, 底层都是利用 静态数组 创建的,我们需要考虑,什么时候 扩容,什么时候 缩小

    链表,是真正的动态结构,它根本不需要去考虑 扩容 、缩小 ,因为它本身就是动态的变化着 ;


    随机访问

    但是 链表 也有缺点,由于底层不再是利用 静态数组 实现的,因此,丧失了 随机访问 能力 ;

    因为 静态数组 底层开辟的内存,是连在一起的,可以根据下标,直接计算出偏移量,直接去访问对应地址的内存 ;

    链表 由于是动态的变化的,它的节点之间,是通过 引用 相互连接在一起的 ,是 无法直接计算 出某一个节点的内存地址的,因此,也就不具备随机访问了;

  • 相关阅读:
    Asp.net2.0页面执行顺序 朱燚:
    通过对比学Python(2):集合对象 朱燚:
    通过比较学python(3):字典类,字符串 朱燚:
    [模版项目]怎样用企业服务实现跨进程缓存 朱燚:
    [轻松一下]世界上至少有10種東西是你不知道的 朱燚:
    评:我从编程中悟出八个字(不算原创,不过希望让大家能看看) 朱燚:
    从追MM谈Java的23种设计模式 朱燚:
    学习笔记_Redis 数据类型02
    MongoDB.Driver 中通过管道(Aggregate)实现分组功能查询出符合条件的数据
    MongoDB.Driver 中实现参数动态查询
  • 原文地址:https://www.cnblogs.com/young-youth/p/11665674.html
Copyright © 2020-2023  润新知