今天學習 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
因爲 單純的比較 比 求模運算 省時,所以上面的結果就不足爲奇了。