判断奇偶数到底哪种方法执行效率高,写一下看看就知道了。

通过实验对比两种判断奇偶数的方法,发现位运算方法在大量数据处理时效率更高。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前看到有人在讨论判断奇偶数的几种方法,今天特地写了一段代码去看看到底哪种方法效率最高。直接贴代码:
public class MyTest {
/**
* 比较两种判断奇偶数方法的执行效率
* @param count 执行次数
* @param numberSize 生成随机数的个数
*/
public static void compare(int count, int numberSize) {
Long tt1 = Long.valueOf(0);
Long tt2 = Long.valueOf(0);
Set numberSet;
for(int i = 0; i < count; i++) {
// 获取指定个数的随机数
numberSet = randomNumber(numberSize);
System.out.println(“第”+ (i + 1) + “次执行:”);
Long t1 = System.currentTimeMillis();
judgeNumber(numberSet);
Long t2 = System.currentTimeMillis();
tt1 += (t2 - t1);
Long t3 = System.currentTimeMillis();
judgeNumber1(numberSet);
Long t4 = System.currentTimeMillis();
tt2 += (t4 - t3);
}
System.out.println("\n第一种方法平均耗时:" + (float) tt1/count + " ms");
System.out.println(“第二种方法平均耗时:” + (float) tt2/count + " ms");
}

// 生成指定个数的随机数
public static Set<Integer> randomNumber(int numberSize) {
	Random random = new Random();
	int n = 0;
	Set<Integer> numberSet = new HashSet<>();
	for (int i = 0; i < Integer.MAX_VALUE; i++) {
		if (numberSet.size() < numberSize) {
			numberSet.add(random.nextInt());
		} else {
			break;
		}
	}
	return numberSet;
}

// 判断奇偶数
public static void judgeNumber(Set<Integer> numberSet) {
	int n1 = 0,n2 = 0;
	for (Integer number:numberSet) {
		if ((number & 0x01) == 0) {
			n1++;
		} else {
			n2++;
		}
	}
	System.out.println("第一种方法偶数的个数是:" + n1 + "\t\t奇数的个数是:" + n2);
}

// 判断奇偶数
public static void judgeNumber1(Set<Integer> numberSet) {
	int n1 = 0,n2 = 0;
	for (Integer number:numberSet) {
		if ((number % 2) == 0) {
			n1++;
		} else {
			n2++;
		}
	}
	System.out.println("第二种方法偶数的个数是:" + n1 + "\t\t奇数的个数是:" + n2);
}

public static void main(String[] args) {
	compare(10, 1000000);
}

}

首先我判断一千次的耗时,执行十次,算出平均耗时,结果如下:
第1次执行:
第一种方法偶数的个数是:519 奇数的个数是:481
第二种方法偶数的个数是:519 奇数的个数是:481
第2次执行:
第一种方法偶数的个数是:512 奇数的个数是:488
第二种方法偶数的个数是:512 奇数的个数是:488
第3次执行:
第一种方法偶数的个数是:486 奇数的个数是:514
第二种方法偶数的个数是:486 奇数的个数是:514
第4次执行:
第一种方法偶数的个数是:500 奇数的个数是:500
第二种方法偶数的个数是:500 奇数的个数是:500
第5次执行:
第一种方法偶数的个数是:482 奇数的个数是:518
第二种方法偶数的个数是:482 奇数的个数是:518
第6次执行:
第一种方法偶数的个数是:506 奇数的个数是:494
第二种方法偶数的个数是:506 奇数的个数是:494
第7次执行:
第一种方法偶数的个数是:478 奇数的个数是:522
第二种方法偶数的个数是:478 奇数的个数是:522
第8次执行:
第一种方法偶数的个数是:528 奇数的个数是:472
第二种方法偶数的个数是:528 奇数的个数是:472
第9次执行:
第一种方法偶数的个数是:496 奇数的个数是:504
第二种方法偶数的个数是:496 奇数的个数是:504
第10次执行:
第一种方法偶数的个数是:514 奇数的个数是:486
第二种方法偶数的个数是:514 奇数的个数是:486

第一种方法平均耗时:1.6 ms
第二种方法平均耗时:1.0 ms

然后我判断一万次的耗时,执行十次,算出平均耗时,结果如下:
第1次执行:
第一种方法偶数的个数是:4946 奇数的个数是:5054
第二种方法偶数的个数是:4946 奇数的个数是:5054
第2次执行:
第一种方法偶数的个数是:4936 奇数的个数是:5064
第二种方法偶数的个数是:4936 奇数的个数是:5064
第3次执行:
第一种方法偶数的个数是:4977 奇数的个数是:5023
第二种方法偶数的个数是:4977 奇数的个数是:5023
第4次执行:
第一种方法偶数的个数是:5004 奇数的个数是:4996
第二种方法偶数的个数是:5004 奇数的个数是:4996
第5次执行:
第一种方法偶数的个数是:5072 奇数的个数是:4928
第二种方法偶数的个数是:5072 奇数的个数是:4928
第6次执行:
第一种方法偶数的个数是:4914 奇数的个数是:5086
第二种方法偶数的个数是:4914 奇数的个数是:5086
第7次执行:
第一种方法偶数的个数是:4962 奇数的个数是:5038
第二种方法偶数的个数是:4962 奇数的个数是:5038
第8次执行:
第一种方法偶数的个数是:5077 奇数的个数是:4923
第二种方法偶数的个数是:5077 奇数的个数是:4923
第9次执行:
第一种方法偶数的个数是:5006 奇数的个数是:4994
第二种方法偶数的个数是:5006 奇数的个数是:4994
第10次执行:
第一种方法偶数的个数是:4940 奇数的个数是:5060
第二种方法偶数的个数是:4940 奇数的个数是:5060

第一种方法平均耗时:3.5 ms
第二种方法平均耗时:2.3 ms

判断十万次的耗时,执行十次,算出平均耗时,结果如下:
第1次执行:
第一种方法偶数的个数是:49929 奇数的个数是:50071
第二种方法偶数的个数是:49929 奇数的个数是:50071
第2次执行:
第一种方法偶数的个数是:49893 奇数的个数是:50107
第二种方法偶数的个数是:49893 奇数的个数是:50107
第3次执行:
第一种方法偶数的个数是:49932 奇数的个数是:50068
第二种方法偶数的个数是:49932 奇数的个数是:50068
第4次执行:
第一种方法偶数的个数是:49898 奇数的个数是:50102
第二种方法偶数的个数是:49898 奇数的个数是:50102
第5次执行:
第一种方法偶数的个数是:50004 奇数的个数是:49996
第二种方法偶数的个数是:50004 奇数的个数是:49996
第6次执行:
第一种方法偶数的个数是:50019 奇数的个数是:49981
第二种方法偶数的个数是:50019 奇数的个数是:49981
第7次执行:
第一种方法偶数的个数是:49881 奇数的个数是:50119
第二种方法偶数的个数是:49881 奇数的个数是:50119
第8次执行:
第一种方法偶数的个数是:50004 奇数的个数是:49996
第二种方法偶数的个数是:50004 奇数的个数是:49996
第9次执行:
第一种方法偶数的个数是:49899 奇数的个数是:50101
第二种方法偶数的个数是:49899 奇数的个数是:50101
第10次执行:
第一种方法偶数的个数是:50066 奇数的个数是:49934
第二种方法偶数的个数是:50066 奇数的个数是:49934

第一种方法平均耗时:8.5 ms
第二种方法平均耗时:8.8 ms

我判断一百万次的耗时,执行十次,算出平均耗时,结果如下:
第1次执行:
第一种方法偶数的个数是:499904 奇数的个数是:500096
第二种方法偶数的个数是:499904 奇数的个数是:500096
第2次执行:
第一种方法偶数的个数是:500172 奇数的个数是:499828
第二种方法偶数的个数是:500172 奇数的个数是:499828
第3次执行:
第一种方法偶数的个数是:499950 奇数的个数是:500050
第二种方法偶数的个数是:499950 奇数的个数是:500050
第4次执行:
第一种方法偶数的个数是:499937 奇数的个数是:500063
第二种方法偶数的个数是:499937 奇数的个数是:500063
第5次执行:
第一种方法偶数的个数是:499896 奇数的个数是:500104
第二种方法偶数的个数是:499896 奇数的个数是:500104
第6次执行:
第一种方法偶数的个数是:499992 奇数的个数是:500008
第二种方法偶数的个数是:499992 奇数的个数是:500008
第7次执行:
第一种方法偶数的个数是:500145 奇数的个数是:499855
第二种方法偶数的个数是:500145 奇数的个数是:499855
第8次执行:
第一种方法偶数的个数是:499907 奇数的个数是:500093
第二种方法偶数的个数是:499907 奇数的个数是:500093
第9次执行:
第一种方法偶数的个数是:499958 奇数的个数是:500042
第二种方法偶数的个数是:499958 奇数的个数是:500042
第10次执行:
第一种方法偶数的个数是:500116 奇数的个数是:499884
第二种方法偶数的个数是:500116 奇数的个数是:499884

第一种方法平均耗时:59.7 ms
第二种方法平均耗时:70.7 ms

可以看到,当判断次数为一千次和一万次的时候,第一种方法甚至比第二种方法耗时更久,直到判断次数达到十万次的时候,第一种方法的优势才开始慢慢显露出来,判断一百万次的时候直接耗时少了十多毫秒。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值