目录


背景

各自完成插入 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 型号有关 ;


链表

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

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


随机访问

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

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

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

最新文章

  1. javascript面向对象之一
  2. iOS 设置系统屏幕亮度
  3. Android和SQLite版本对应关系
  4. 【原】Comparator和Comparable的联系与区别
  5. token验证 sae
  6. Material Master
  7. hdu_5876_Sparse Graph(补图BFS)
  8. 46. leetcode 500. Keyboard Row
  9. 《JavaScript高级程序设计》笔记:事件(十三)
  10. Vue过滤器
  11. linux内存 free命令 buffer cache作用
  12. js 实现异步上传图片+预览
  13. JavaWeb三大组件之Servlet
  14. java代码理解
  15. Android学习之基础知识十四 — Android特色开发之基于位置的服务
  16. ROS 错误之 [rospack] Error: package &#39;beginner_tutorials&#39; not found
  17. shell中test命令方法详解
  18. 微信小程序导出当前画布指定区域的内容并生成图片保存到本地相册(canvas)
  19. svn up 排除目录更新
  20. addEvent兼容版

热门文章

  1. sequence_loss的解释
  2. springboot中web应用的统一异常处理
  3. Mysql中行转列和列转行
  4. OpenResty之指令与常用API
  5. linux下添加动态链接库路径、动态库加载等方法
  6. IOS项目集成ShareSDK实现第三方登录、分享、关注等功能
  7. Android自定义控件之基本图形绘制
  8. osg ifc ifccolumn
  9. Spark2.0协同过滤与ALS算法介绍
  10. React Native使用NetInfo对当前系统网络的判断