【蓝桥杯Java_C组·从零开始卷】第二节(附)、if与switch效率比较(千万次/一亿次)

举报
红目香薰 发表于 2022/01/24 13:52:09 2022/01/24
【摘要】 ​前言:分支数小于三时,else if 效率更高等于三时,效率近乎相同大于三时,switch case效率更高if与switch小于三次对比:package Action;public class HelloWorld { static int count=10000000; public static void main(String[] args) { if_test(); Syst...

前言:

分支数

小于三时,else if 效率更高

等于三时,效率近乎相同

大于三时,switch case效率更高

if与switch小于三次对比:

package Action;

public class HelloWorld {
	static int count=10000000;
	public static void main(String[] args) {
		if_test();
		System.gc();//清理一下
		switch_test();
	}
	public static void if_test() {
		long start = System.currentTimeMillis();
		for (int i = 0; i <count; i++) {
			if(i==(10000000-1)) {
				System.out.println("if判断一千万次");
			}
		}
		long end = System.currentTimeMillis();
		System.out.println("if判断一千万次"+(end-start)+"毫秒");
	}
	public static void switch_test() {
		long start = System.currentTimeMillis();
		for (int i = 0; i <count; i++) {
			switch(i) {
				case 10000000-1:System.out.println("switch判断一千万次");break;
			}
		}
		long end = System.currentTimeMillis();
		System.out.println("switch判断一千万次"+(end-start)+"毫秒");
	}
}

区别还算明显吧,量少,可以用一亿试试。

package Action;

public class HelloWorld {
	static int count=100000000;
	public static void main(String[] args) {
		if_test();
		System.gc();//清理一下
		switch_test();
	}
	public static void if_test() {
		long start = System.currentTimeMillis();
		for (int i = 0; i <count; i++) {
			if(i==(100000000-1)) {
				System.out.println("if判断一亿次");
			}
		}
		long end = System.currentTimeMillis();
		System.out.println("if判断一亿次"+(end-start)+"毫秒");
	}
	public static void switch_test() {
		long start = System.currentTimeMillis();
		for (int i = 0; i <count; i++) {
			switch(i) {
				case 100000000-1:System.out.println("switch判断一亿次");break;
			}
		}
		long end = System.currentTimeMillis();
		System.out.println("switch判断一亿次"+(end-start)+"毫秒");
	}
}

 这就很明显了。

if与switch等于三次对比:

package Action;

public class HelloWorld {
	static int count=10000000;
	public static void main(String[] args) {
		switch_test();
		if_test();
	}
	public static void if_test() {
		long start = System.currentTimeMillis();
		for (int i = 0; i <count; i++) {
			if(i==(10000000-1)) {
				System.out.println("if判断一千万次");
			}else if(i==-1) {
				
			}else if(i==-2){
				
			}
		}
		long end = System.currentTimeMillis();
		System.out.println("if判断一千万次"+(end-start)+"毫秒");
	}
	public static void switch_test() {
		long start = System.currentTimeMillis();
		for (int i = 0; i <count; i++) {
			switch(i) {
				case 10000000-1:System.out.println("switch判断一千万次");break;
				case -1:break;
				case -2:break;
			}
		}
		long end = System.currentTimeMillis();
		System.out.println("switch判断一千万次"+(end-start)+"毫秒");
	}
}

三个的时候其实还是if快一些。

if与switch大于三次对比:

package Action;

public class HelloWorld {
	static int count=10000000;
	public static void main(String[] args) {
		if_test();
		System.gc();
		switch_test();
	}
	public static void if_test() {
		long start = System.currentTimeMillis();
		for (int i = 0; i <count; i++) {
			if(i==(10000000-1)) {
				System.out.println("if判断一千万次");
			}else if(i==-1) {
				
			}else if(i==-2){
				
			}else if(i==-3){
				
			}else if(i==-4){
				
			}else if(i==-5){
				
			}else if(i==-6){
				
			}else if(i==-7){
				
			}else if(i==-8){
				
			}else if(i==-9){
				
			}else if(i==-10){
				
			}
		}
		long end = System.currentTimeMillis();
		System.out.println("if判断一千万次"+(end-start)+"毫秒");
	}
	public static void switch_test() {
		long start = System.currentTimeMillis();
		for (int i = 0; i <count; i++) {
			switch(i) {
				case 10000000-1:System.out.println("switch判断一千万次");break;
				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;
			}
		}
		long end = System.currentTimeMillis();
		System.out.println("switch判断一千万次"+(end-start)+"毫秒");
	}
}

这回效果还是比较明显的,用一亿再试试:

这就更明显了。

希望能对大家有所帮助,欢迎一键三连。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。