今天学习 jdk 源码,看到了类 Integer 的实现,有一点比较有感触
final static int [] sizeTable = { 9, 99, 999, 9999, 99999, 999999, 9999999,
99999999, 999999999, Integer.MAX_VALUE };
// Requires positive x
static int stringSize(int x) {
for (int i=0; ; i++)
if (x <= sizeTable[i])
return i+1;
}
求 一个 整数的 stringsize
按照正常思维肯定用下面的方法实现
while(temp>0){
temp/=10;
}
于是 做了如下测试
long start=System.currentTimeMillis();
int [] sizeTable = { 9, 99, 999, 9999, 99999, 999999, 9999999,
99999999, 999999999, Integer.MAX_VALUE };
for(int i=0;i<10000000;i++){
for(int j=0;;j++){
if(i
break;
}
}
}
long end=System.currentTimeMillis();
int temp;
for(int i=0;i<10000000;i++){
temp=i;
while(temp>0){
temp/=10;
}
}
long last=System.currentTimeMillis();
System.out.println((end-start)+"ms"+"----"+(last-end)+"ms" );
输出
74ms—312ms
深入JDK
因为 单纯的比较 比 求模运算 省时,所以上面的结果就不足为奇了。