两个方法:
public static String getPreZeroNumber(int num,String str){
int strLen = str.length();
if (strLen < num) {
while (strLen < num) {
StringBuffer sb = new StringBuffer();
sb.append("0").append(str);//左补0
// sb.append(str).append("0");//右补0
str = sb.toString();
strLen = str.length();
}
}
return str;
}
public static String getPreZeroNumber2(int num,String str){
int strLen = str.length();
if(str.length() < num){
for(int i = strLen; i<= num;i++){
str = "0"+str;
}
}
return str;
}
测试:
long startMili=System.currentTimeMillis();
String str1 = getPreZeroNumber(900000,"1");
long endMili=System.currentTimeMillis();
System.out.println("str1.length():"+str1.length()+" 总耗时为:"+(endMili-startMili)+"毫秒");
long startMili2=System.currentTimeMillis();
String str2 = getPreZeroNumber2(900000,"1");
long endMili2=System.currentTimeMillis();
System.out.println("str2.length():"+str2.length()+" 总耗时为2:"+(endMili2-startMili2)+"毫秒");
结果:
结果很意外,按理说,StringBuffer的效率要比String的高的多,结果两个方法的效率却刚好反过来。
原因嘛,应该是方法:
getPreZeroNumber
创建并且修改了多个对象,而方法:
getPreZeroNumber2
则比较单纯,只是修改了String对象。
另一个原因可能是for循环和while循环的效率问题,于是新建了第三个方法
public static String getPreZeroNumber3(int num,String str){
int strLen = str.length();
if (strLen < num) {
for(int i = strLen; i<= num;i++){
StringBuffer sb = new StringBuffer();
sb.append("0").append(str);
str = sb.toString();
}
}
return str;
}
因为上面测试耗时挺长,所有改小了数量
long startMili=System.currentTimeMillis();
String str1 = getPreZeroNumber(500000,"1");
long endMili=System.currentTimeMillis();
System.out.println("str1.length():"+str1.length()+" 总耗时为:"+(endMili-startMili)+"毫秒");
long startMili2=System.currentTimeMillis();
String str2 = getPreZeroNumber2(500000,"1");
long endMili2=System.currentTimeMillis();
System.out.println("str2.length():"+str2.length()+" 总耗时为2:"+(endMili2-startMili2)+"毫秒");
long startMili3=System.currentTimeMillis();
String str3 = getPreZeroNumber3(500000,"1");
long endMili3=System.currentTimeMillis();
System.out.println("str3.length():"+str3.length()+" 总耗时为3:"+(endMili3-startMili3)+"毫秒");
结果如下:
事实证明,方法3修改while循环为for循环后,效率变慢了......
修改测试循环次数为100000次,
long startMili=System.currentTimeMillis();
getPreZeroNumber(100000,"1");
long endMili=System.currentTimeMillis();
System.out.println("总耗时为:"+(endMili-startMili)+"毫秒");
long startMili2=System.currentTimeMillis();
getPreZeroNumber2(100000,"1");
long endMili2=System.currentTimeMillis();
System.out.println("总耗时为2:"+(endMili2-startMili2)+"毫秒");
long startMili3=System.currentTimeMillis();
getPreZeroNumber3(100000,"1");
long endMili3=System.currentTimeMillis();
System.out.println("总耗时为3:"+(endMili3-startMili3)+"毫秒");
结果如下:
方法3和方法2效率非常接近了......
再次修改循环次数 10000次:
long startMili=System.currentTimeMillis();
String str1 = getPreZeroNumber(10000,"1");
long endMili=System.currentTimeMillis();
System.out.println("str1.length():"+str1.length()+" 总耗时为:"+(endMili-startMili)+"毫秒");
long startMili2=System.currentTimeMillis();
String str2 = getPreZeroNumber2(10000,"1");
long endMili2=System.currentTimeMillis();
System.out.println("str2.length():"+str2.length()+" 总耗时为2:"+(endMili2-startMili2)+"毫秒");
long startMili3=System.currentTimeMillis();
String str3 = getPreZeroNumber3(10000,"1");
long endMili3=System.currentTimeMillis();
System.out.println("str3.length():"+str3.length()+" 总耗时为3:"+(endMili3-startMili3)+"毫秒");
结果如下:
方法3比方法2效率高了......
结论:1.小数据量(10000)下:方法3>方法2>方法1;
2.中数据(100000)量下:方法3=方法2>方法1;
3.大数据(500000)量下:方法2>方法1>方法3;
最后一天上班,敲代码刚好遇到,闲得无聊,顺便测试了下。