學習JDK 源碼的體會

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章