复习笔记9 if else 以及效率优化
2012-06-03 19:46
337 查看
public class Test10 { public static void main(String[] args) { //if else int x = 0; //当表达式x > 1为真时进入作用域1中 //当表达式结果为假时进入作用域2中 //作用域1 和 作用域2是不会并存的 if(x > 1) { // 1 } else { // 2 } //else if 可以有多个,表示第一层次的逻辑划分 if(x > 1) { // 1 } else if(x < 1) { // 2 } else { // 3 } //这个代码属于典型的垃圾代码,x > 2的话 //一定会大于1 if(x > 1) { if(x > 2) { // code } } //对于这个代码而言 //x只有等于2或者大于2两种 //多加一个x > 1只会让代码看起来难懂 if(x > 1) { if(x > 2) { } else { } } //这段代码效率很低,实际上你把0-9的10个数 //分两段 //x > 1的情况有8种,也就是说第二个表达式 //判断了8次,加上第一个的10次,总共18次 //如果把两个表达式顺序调换下,你会发现 //x < 4仅有4种,总共14次 for (int i = 0; i < 10; i++) { //错误 if(i > 1 && i < 4) { } //正确 if(i < 4 && i > 1) { } //正确 if(i < 4) { if(i > 1) { } } } //这个是上边这个的测试 printTimes(); System.out.println("===================================>"); //对于这个代码,如果逻辑区是连续的, //这样写并不是好办法,额外的判断次数 //会使效率低下 if(x < 10) { if(x > 7) { } else if(x > 5 && x < 8) { } else if(x > 3 && x < 6) { } } //简单把逻辑区域划分一下,其实还是蛮简单的 if(x < 10) { if(x > 7) { } else if(x > 5) { } else if(x > 3) { } } printTimes1(); System.out.println("===================================>"); } /* for (int i = 0; i < 2000000000; i++) for (int j = 0; j < 1000; j++) if (j > 0 && j < 100) times=4501377 ns if (j < 100 && j > 0) times=3312574 ns */ public static void printTimes() { int y = 2; long nano = 0l; System.out.println("for (int i = 0; i < 2000000000; i++)"); System.out.println(" for (int j = 0; j < 1000; j++)"); nano = System.nanoTime(); for (int j = 0; j < 2000000000; j++) { for (int i = 0; i < 1000; i++) { if(j > 0 && j < 100) { y = 5 / 3; } } } nano = System.nanoTime() - nano; System.out.println(" if (j > 0 && j < 100) times=" + nano + " ns"); nano = System.nanoTime(); for (int j = 0; j < 2000000000; j++) { for (int i = 0; i < 1000; i++) { if(j < 100 && j > 0) { y = 5 / 3; } } } nano = System.nanoTime() - nano; System.out.println(" if (j < 100 && j > 0) times=" + nano + " ns"); } /* for (int i = 0; i < 2000000; i++) for (int j = 0; j < 10; j++) if(y > 7 && y < 10) else if(y > 5 && y < 8) else if(y > 3 && y < 6) times=29993107 ns if(y < 10) if(y > 7) else if(y > 5) else if(y > 3) times=21235980 ns */ public static void printTimes1() { int y = 0; long nano = 0l; System.out.println("for (int i = 0; i < 2000000; i++)"); System.out.println(" for (int j = 0; j < 10; j++)"); nano = System.nanoTime(); for (int j = 0; j < 2000000; j++) { for (int i = 0; i < 10; i++) { if(y > 7 && y < 10) { y = 5 * 0; } else if(y > 5 && y < 8) { y = 5 * 0; } else if(y > 3 && y < 6) { y = 5 * 0; } } } nano = System.nanoTime() - nano; System.out.println(" if(x > 7 && x < 10)"); System.out.println(" else if(x > 5 && x < 8)"); System.out.println(" else if(x > 3 && x < 6) times=" + nano + " ns"); System.out.println(); nano = System.nanoTime(); for (int j = 0; j < 2000000; j++) { for (int i = 0; i < 10; i++) { if(y < 10) { if(y > 7) { y = 5 * 0; } else if(y > 5) { y = 5 * 0; } else if(y > 3) { y = 5 * 0; } } } } nano = System.nanoTime() - nano; System.out.println(" if(x < 10)"); System.out.println(" if(x > 7)"); System.out.println(" else if(x > 5)"); System.out.println(" else if(x > 3) times=" + nano + " ns"); } }
相关文章推荐
- 复习笔记10 switch 编译器优化的两种方式 和if的效率对比
- switch...case 和 if...else效率比较和优化
- switch...case 和 if...else效率比较和优化
- switch...case 和 if...else效率比较和优化
- switch...case 和 if...else效率比较和优化
- switch...case 和 if...else效率比较和优化
- switch...case 和 if...else效率比较和优化
- switch...case 和 if...else效率比较和优化
- switch...case 和 if...else效率比较和优化
- switch...case 和 if...else效率比较和优化
- switch...case 和 if...else效率比较和优化
- switch...case 和 if...else效率比较和优化
- switch...case 和 if...else效率比较和优化
- switch...case 和 if...else效率比较和优化
- switch...case 和 if...else效率比较和优化
- switch...case 和 if...else效率比较和优化
- If Else 优化之道
- 策略模式+工厂模式优化if...else if...else if结构
- shell的if else 以及大于,小于等逻辑表达式
- 求 1+2+3+..n不能使用乘除法、 for 、 while 、 if 、 else 、 switch 、 case 等关键字以及条件判断语句