突然想到一个经常遇到的 循环中的条件判断问题, 就实验了一下, 结果很让人不解, 请看下面代码
第一部分, 循环中写不写else 效率相差相差 40% , 按理说,第一种写法比第二种判断次数还多了一次 ,结果却比第二种快很多
如果去掉 那个 else , 两种写法就相同了, 运行时间也相同
高手解答
public static void main(String[] args) {
int count = 100000000; //循环次数
// 第一部分
long start1 = System.currentTimeMillis();
for(int i = 0; i< count; i++){
if(i == 1000){
}
if(i == 2000){
}
}
long end1 = System.currentTimeMillis();
System.out.println(end1 - start1);
// 第二部分
long start2 = System.currentTimeMillis();
for(int i = 0; i< count; i++){
if(i == 1000){
}
else //此处else 写与不写 效率相差很大
if(i== 2000){
}
}
long end2 = System.currentTimeMillis();
System.out.println(end2 - start2);
}结果:
119
173
第一部分, 循环中写不写else 效率相差相差 40% , 按理说,第一种写法比第二种判断次数还多了一次 ,结果却比第二种快很多
如果去掉 那个 else , 两种写法就相同了, 运行时间也相同
高手解答
public static void main(String[] args) {
int count = 100000000; //循环次数
// 第一部分
long start1 = System.currentTimeMillis();
for(int i = 0; i< count; i++){
if(i == 1000){
}
if(i == 2000){
}
}
long end1 = System.currentTimeMillis();
System.out.println(end1 - start1);
// 第二部分
long start2 = System.currentTimeMillis();
for(int i = 0; i< count; i++){
if(i == 1000){
}
else //此处else 写与不写 效率相差很大
if(i== 2000){
}
}
long end2 = System.currentTimeMillis();
System.out.println(end2 - start2);
}结果:
119
173
解决方案 »
- 关于GridBagLayout的问题,请教!
- java 串口配置问题
- 斑竹很有效率,不能灌水,那分享个东东吧!
- 我编的记事本中无法添加滚动条
- 字符串替换: 如何替换中文字符冒号:和[
- 请教RMI原理问题:RMIRegistery与服务器端必须运行在同一机器上呢??
- 看看这个有什么问题!!!!
- 100分!!用Inno Setup 打包时,能嵌入其它安装程序么?比如嵌入J2SDK
- 一个巨简单的问题 不需要具体答案!有分!
- 【阿里巴巴面试题】Java案例需求:去掉第二列第二个数为0的行...
- sort后fill然后binarySearch
- dom4j为什么比JDOM更高效? 两者不都是生成一颗xml文档树么?
然后else内部的if又要执行count-1次。第二次消耗的时间片多大概50%。
是这样,第二种方法多出的时间 应该是消耗在 else 身上的, 但是为什么 这个else 会这么耗时?
本身有什么特殊的 ? 如果这样, 以后 还不如不写这个 else
至于else之后再判断i等于2000,确实没必要。
if(i == 1000){
}
if(i == 2000){
}
两次判断条件互斥,没有相关性,完全可以不用else
运行速度慢的机子,加了else增加效率。
两个 if () 必然会条件互斥, 但我加了 else 明明减少了一次判断, 时间却在增加
如果说加上else 有一个 跳转 需要耗时 , 这个说法能说通 ,并且 去掉 else 里面判断之后 耗时和判断两次差不多
所以else关键字 本事 耗时相当于一次判断 ,真是奇怪
多了好多cpu指令
时间肯定更多些不过都基本可以忽略