正文
java素数代码优化 java素数程序
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
Java代码的优化方法有哪些
说到代码优化,每个人或多或少都掌握一到两种方法,但是这样的方法对提升代码运行效率效果不大,最重要是对代码的重视和了解,这样才能提升代码的运行效率。在进行代码优化的过程中,方法是非常重要的,多掌握几种方法,根据代码的不同情况选择适合的方法进行优化。下面电脑培训为大家介绍Java代码优化的几种方法。
1、使用指定类、方法的final修饰符
具有final修饰符的类不可派生。在Java核心API中,有许多最终应用程序的例子,例如java.lang.String,整个类都是final。为类指定final修饰符允许继承类,并且为方法指定final修饰符允许覆盖该方法。如果将类指定为final,IT培训认为该类的所有方法都是final。Java编译器将寻找内联所有最终方法的机会。内联对于提高Java操作的效率非常重要。这可以将性能平均提高50%。
2、重用对象
String对象的使用是非常重要的,StringBuilder/StringBuffer并不是字符串连接。由于Java虚拟机需要时间来生成对象,所以将来垃圾收集和处理这些对象可能需要一些时间。因此,生成太多对象将对程序的性能产生很大影响。
3、使用局部变量
调用方法时传递的参数以及在调用中创建的临时变量都保存在堆栈中,速度更快。其他变量(如静态变量和实例变量)在堆中创建并且速度较慢。此外,昆明北大青鸟发现在堆栈中创建的变量,当方法完成运行时,内容消失,不需要进行额外的垃圾收集。
4、及时关闭流
在Java编程过程中,在执行数据库连接和I/O流操作时要小心。使用后,北大青鸟云南嘉荟校区官网建议应及时关闭以释放资源。因为这些大型物体的操作会导致系统的大量开销,稍微粗心会导致严重的后果。
java求素数代码
求1-N以内java素数代码优化的所有素数,实现思路如下:
1、 得到1到n之间java素数代码优化的素数,存到一个ArrayList集合。
2、判断一个数是不是素数:只能被1和本身整除
说明:从2开始除,不需要到n,也就是循环条件是 n 就可以,这之间只要被整除了,那么他就不是素数了。
3、设置主函数,运行 getPrimeNumberToN获取限定范围内的素数。
执行结果图:
扩展资料:
实现功能的编程事项:
1、模块化思想。
先拆分需求,先拆分先考虑怎么确定一个数是不是素数,然后再复用到所有。不能把方法堆到一起,否则无法复用代码。
2、注意注释。
就算是自己的测试代码,尽量写清楚注释,这样即使过了三个月,再看代码,也能清晰明了。不要觉得简单,就懒得注释。
3、注意参数命名。
从类名到方法名,再到变量名,都不能随意取名,关于这个命名,不要嫌弃长,重点是意思清楚明白。见名知意(语义化),是最好的。
用java语言写一个判断一个整数是否为质数的程序(要求利用三种方法逐步优化实现)
我写了几种方法,并逐步优化,并且对每一种方法进行了1000000次的调用测试每种方法的速度,仅供参考:
import java.math.BigInteger;
public class Test_04 {
/**
* 最笨重的一种方法,用该整数分别除以比它小的数,看是否能被整除
*/
public boolean isPrimeNum_1(int num) {
// 识别小于2的数
if (num 2) {
return false;
}
for (int i = 2; i num; i++) {
if (num % i == 0) {
return false;
}
}
return true;
}
/**
* 优化第一种方法br
* 1、偶数不可能是质数br
* 2、对于大于2的数,如果一个数a大于数b的一半,那么b不可能被a整除
*/
public boolean isPrimeNum_2(int num) {
// 2特殊处理
if (num == 2) {
return true;
}
// 识别小于2的数和偶数
if (num 2 || num % 2 == 0) {
return false;
}
int max = num / 2;
for (int i = 3; i max; i += 2) {
if (num % i == 0) {
return false;
}
}
return true;
}
/**
* 在第二种方法上再次优化,利用数字的性质:br
* 一个数不是素数就是合数,那么一定可以由两个自然数相乘得到,其中一个大于或等于它的平方根,br
* 一个小于或等于它的平方根,并且成对出现。br
* 这样就可以把计算量大幅度减少
*/
public boolean isPrimeNum_3(int num) {
if (num == 2) {
return true;// 2特殊处理
}
if (num 2 || num % 2 == 0) {
return false;// 识别小于2的数和偶数
}
double sqrt = Math.sqrt(num);
for (int i = 3; i = sqrt; i += 2) {
if (num % i == 0) {
return false;
}
}
return true;
}
/**
* Java中的BigInteger中已经写好了一个判断是否为质数的方法,直接用就可以了
*/
public boolean isPrimeNum_4(int num) {
BigInteger integer = BigInteger.valueOf(num);
return integer.isProbablePrime(1);
}
public static void main(String[] args) {
Test_04 test_04 = new Test_04();
int num = 991;
System.out.println(test_04.isPrimeNum_1(num));
long startTime = System.currentTimeMillis();
for (int i = 0; i 1000000; i++) {
test_04.isPrimeNum_1(num);
}
long endTime = System.currentTimeMillis();
System.out.println("第一种方法运行时间:" + (endTime - startTime) + "ms");
System.out.println(test_04.isPrimeNum_2(num));
startTime = System.currentTimeMillis();
for (int i = 0; i 1000000; i++) {
test_04.isPrimeNum_2(num);
}
endTime = System.currentTimeMillis();
System.out.println("第二种方法运行时间:" + (endTime - startTime) + "ms");
System.out.println(test_04.isPrimeNum_3(num));
startTime = System.currentTimeMillis();
for (int i = 0; i 1000000; i++) {
test_04.isPrimeNum_3(num);
}
endTime = System.currentTimeMillis();
System.out.println("第三种方法运行时间:" + (endTime - startTime) + "ms");
System.out.println(test_04.isPrimeNum_4(num));
startTime = System.currentTimeMillis();
for (int i = 0; i 1000000; i++) {
test_04.isPrimeNum_4(num);
}
endTime = System.currentTimeMillis();
System.out.println("第四种方法运行时间:" + (endTime - startTime) + "ms");
}
}
输出结果:
true
第一种方法运行时间:2732ms
true
第二种方法运行时间:671ms
true
第三种方法运行时间:68ms
true
第四种方法运行时间:1064ms
java素数代码优化的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java素数程序、java素数代码优化的信息别忘了在本站进行查找喔。