- 浏览: 379896 次
文章分类
最新评论
-
fishermen:
使用 <%@ page session="fa ...
Tomcat 的session管理 -
xinyiwust:
楼主你好!你总结的第一点:对于stateless的data s ...
Tomcat 的session管理 -
hujintao:
好像换成JDK目录后还是不行,比如HashMap这些类都不可以 ...
eclipse 调试 跟进 jdk -
顾小五:
是不是一般重写的方法,都有子类继承父类,就是 A extend ...
JAVA方法重载和方法重写 -
jhq986:
好用一定好评
lomboz插件下载
一直认为switch的效率高于if,特别对于条件大于3的时候,以前也貌似看过资料说:switch的查找类似二叉树,if的则是线性。
最近做了一个简单的测试,对有多个条件式的switch和if做比较,发现两者的效率几乎相同,if的效率甚至高于switch;<测试环境sun jdk6.1.13>
40个条件式的测试,测试1000 0000次,if耗时219ms, switch耗时234ms,平均都在4-5k/s;
30个条件式的测试,测试1000 0000次,if耗时188 switch耗时172平均都在5-6kw/s,
20个条件式,测试1000 0000次,if耗时109mswitch耗时125ms,平均在8-9kw/s
总结:
1 经过jdk的改进,目前switch和if的性能上差别微乎其微
2 条件式的多少对于一般应用的整体性能来说,影响也非常小。
3 影响效率的最大因子是条件式的数量,而非if或switch
测试代码
private static void testSitchAndIf(){ int testCount = 10000000; int flag = 0; Random random = new Random(testCount); int[] flags = new int[testCount]; for(int i = 0; i < testCount; i++){ flags[i] = random.nextInt() + 1; } // 先统一取一遍值,保证测试都用缓存值 for(int i = 0; i < testCount; i++){ flag = flags[i]; } long time1 = System.currentTimeMillis(); for(int i = 0; i < testCount; i++){ //flag = random.nextInt() + 1; flag = flags[i]; if(flag == 1){} else if(flag == 2){} else if(flag == 3){} else if(flag == 4){} else if(flag == 5){} else if(flag == 6){} else if(flag == 7){} else if(flag == 8){} else if(flag == 9){} else if(flag == 10){} else if(flag == 11){} else if(flag == 12){} else if(flag == 13){} else if(flag == 14){} else if(flag == 15){} else if(flag == 16){} else if(flag == 17){} else if(flag == 18){} else if(flag == 19){} else if(flag == 20){} else if(flag == 21){} else if(flag == 22){} else if(flag == 23){} else if(flag == 24){} else if(flag == 25){} else if(flag == 26){} else if(flag == 27){} else if(flag == 28){} else if(flag == 29){} else if(flag == 30){} // else if(flag == 31){} // else if(flag == 32){} // else if(flag == 33){} // else if(flag == 34){} // else if(flag == 35){} // else if(flag == 36){} // else if(flag == 37){} // else if(flag == 38){} // else if(flag == 39){} // else if(flag == 40){} } long time2 = System.currentTimeMillis(); for(int i = 0; i < testCount; i++){ flag = flags[i]; switch(flag){ case 1: break; case 2: break; case 3: break; case 4: break; case 5: break; case 6: break; case 7: break; case 8: break; case 9: break; case 10: break; case 11: break; case 12: break; case 13: break; case 14: break; case 15: break; case 16: break; case 17: break; case 18: break; case 19: break; case 20: break; case 21: break; case 22: break; case 23: break; case 24: break; case 25: break; case 26: break; case 27: break; case 28: break; case 29: break; case 30: break; // case 31: break; // case 32: break; // case 33: break; // case 34: break; // case 35: break; // case 36: break; // case 37: break; // case 38: break; // case 39: break; // case 40: break; // case 41: break; } } long time3 = System.currentTimeMillis(); System.out.println("loop count:" + testCount); System.out.println("if consume time:" + (time2 - time1) + ",avg:" + testCount / (time2 - time1) * 1000); System.out.println("switch consume time:" + (time3 - time2) + ",avg:" + testCount / (time3 - time2) * 1000); }
评论
2 楼
fishermen
2010-08-27
循环几十次,可计量时间短,而且样本数量也少,不容易看出实际效果。
1 楼
jarry-li
2010-08-23
楼主为什么不是循环几十次,if..else 有10 000 000次呢
发表评论
-
扩展列表
2013-05-30 16:15 9561 resources的获取方法 String re ... -
xml 构造及解析时的非法字符问题
2010-07-07 14:45 3522系统交互会用到xml,如果直接构造xml的字串,很 ... -
eclipse 调试 跟进 jdk
2009-08-12 09:49 3862突然发现用eclipse调试时不能跟进jdk的类 ... -
JavaScript to Java Communication
2009-05-18 18:51 1351对于应用程序,可以监听端口,构造协议,以实现特殊功能。 ... -
有关jsp/servlet的重定向技术综述[转载]
2007-07-02 15:00 2058有关jsp/servlet的重定向技术综述(2007-5-21 ... -
经典错误汇总!
2007-03-20 19:29 1865收集自己平日的错误,写出解决办法与要注意的地方,方便以后自己与 ... -
dom4jz之基础:XSL,XSLT,XPATH,XHTML,XML命名空间(网上搜集整理)
2007-03-10 10:59 2694整理到一块,方便自己与大家查阅 XHTML 介绍 XHTML ... -
面试点滴
2006-12-05 09:53 1582招工完毕,总结下,其他兄弟们继续努力^_^ 方正 第一次给了方 ... -
WAP技术
2006-11-28 18:33 2157WAP技术 手机上网是一个非常美好的梦想。为实 ... -
wap---介绍
2006-11-28 10:27 2412WAP WAP是Wirele ... -
eclipse3.1.2+lomboz开发j2ee程序与web应用---注意篇(2)
2006-11-27 20:16 2500还有些要注意的细节,特别说明下: ... -
eclipse+lomboz开发j2ee程序与web应用---配置(1)
2006-11-27 19:49 5834感谢每一位看到这篇文章的朋友,文章内容来自网络,请大家常来多 ... -
java面试笔试题大汇总
2006-11-24 15:54 8036java面试笔试题大汇总 JAVA相关基础知识 1、面向对象的 ... -
mustang,dolpin ---jdk
2006-11-13 22:50 1536news: Mustang、Dolpin更名JDK6、JDK ... -
JNDI介绍
2006-11-12 22:26 2826基于JNDI的应用开发 JNDI(The Java Nam ... -
Hibernate缓存
2006-10-31 22:39 1604缓存是介于应用程序和 ... -
Spring问答学习
2006-10-31 22:15 17901、如何学习Spring? 你可以通过下列途径学习sp ... -
Java/JSP中文乱码问题解决心得
2006-10-31 21:16 15018Java/JSP中文乱码问题解 ... -
JNI浅析
2006-10-26 21:19 1694JNI:是java本地接口,是jdk的一部分,通过jni ... -
NoClassDefDoundErr与ClassNotFoundException区别
2006-07-11 10:24 1799NoClassDefDoundErr与ClassNotFo ...
相关推荐
【作品名称】:泰迪杯 : 基于 python 实现 运输车辆安全驾驶行为的分析 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】: 在车辆运输过程中,不良驾驶行为主要包括疲劳驾驶、急加速、急减速、怠速预热、 超长怠速、熄火滑行、超速、急变道等。 针对以上运输车辆的不良驾驶行为,给出不同不良驾驶行为的判别标准,行车安全评价模型如下: 疲劳驾驶:连续行车时间超过4小时。 提取数据思路:若某一行acc_state列值为1并且gps_speed列数值大于0,则认为汽车开始启动,继续扫描数据表,直到寻找到一行gps_speed列的数值为0,则认为汽车已经处于停止状态,再根据location_time列由两个数据获取时间间隔,判断是否属于疲劳驾驶。 急加速、急减速:每两个经纬度间汽车的加速度达到或者超过20km/s^2。两个经纬度间汽车的加速 【资源声明】:本资源作为“参考资料”而不是“定制需求”,代码只能作为参考,不能完全复制照搬。需要有一定的基础看懂代码,自行调试代码并解决报错,能自行添加功能修改代码。
基于springboot的校园社交平台源码数据库文档.zip
scipy-1.7.1-cp37-cp37m-linux_armv7l.whl
java源码资源EJB 模拟银行ATM流程及操作源代码提取方式是百度网盘分享地址
pillow-11.0.0-cp39-cp39-linux_armv7l.whl
java面试视频资源微服务架构之Spring Cloud Eureka 场景分析与实战提取方式是百度网盘分享地址
基于springboot+vue的音乐播放系统源码数据库文档.zip
matplotlib-3.5.0-cp37-cp37m-linux_armv7l.whl
onnxruntime-1.16.2-cp311-cp311-win_amd64.whl
基于springboot复兴村医疗管理系统源码数据库文档.zip
环境说明: 开发软件:VS 2017 (版本2017以上即可,不能低于2017) 数据库:SqlServer2008r2(数据库版本无限制,都可以导入) 开发模式:mvc
onnxruntime-win-x64-gpu-1.19.2.zip
bimdata_api_client-4.0.7-py3-none-any.whl
基于springboot的实验室开放管理系统源码数据库文档.zip
Pillow-9.2.0-cp39-cp39-linux_armv7l.whl
STM32神舟III号例程源码STM32芯片按键点灯-无防抖(STM32神舟III号-寄存器版)提取方式是百度网盘分享地址
基于springboot医疗废物管理系统源码数据库文档.zip
基于springboot的车辆保险理赔平台源码数据库文档.zip