由String.equals()方法引發的一系列思考

    廢話很少說直接貼String.euqals方法代碼前端

public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String)anObject;
        int n = value.length;
        if (n == anotherString.value.length) {
            char v1[] = value;
            char v2[] = anotherString.value;
            int i = 0;
            while (n-- != 0) {
                if (v1[i] != v2[i])
                    return false;
                i++;
            }
            return true;
        }
    }
    return false;
}

在閱讀equals方法實現的時候對紅色字體的邏輯感受不夠簡化(須要多定義一個變量  'i' ),因此本身實現了以下代碼(替換紅色部分),程序員

while (n != 0) {
    if (v1[--n] != v2[n])
        return false;
}

自認爲少定義了一個變量,能夠優化代碼行數(最近在關注代碼質量問題,開始對代碼有潔癖,多一行都感受不夠優雅 ^_^),而後內心小高興的讓媳婦(高前端)來探討(其實就是想炫耀了)。數組

   咱們就在代碼優雅及可讀性、常規思惟的優先級互不相讓,忽然又想到數組根據下標取數據的效率快慢(這但是決定了個人優化在效率方面是否有提高哇),趕忙查看JDK數組的實現。jvm

    上網查了一些資料卻沒有找到JDK 數組實現的相關內容,因此只能先暫時放下這個思路(有知道的大神給點提示哇)。另尋思路就是本身實現一個超級大的數組,而後比較數組取第一個元素及取最後一個元素的時間差,因而做者變實現了以下代碼:字體

public static void main(String[] args) {
    int vArr[] = new int[15464691];//jvm默認數組最大值
    int i = 0;
    while(i != 15464691){
        vArr[i] = i++;
    }
    long start = System.currentTimeMillis();
    System.out.println(vArr[0] + " time:" + (start - System.currentTimeMillis()));
    start = System.currentTimeMillis();
    System.out.println(vArr[15464690]+" time:"+(start - System.currentTimeMillis() ));
}

控制打印信息:優化

    0 time:0(屢次運行中,有一次出現-1)
    15464690 time:0this

    因此在數組取值的效率這個問題上暫且結論爲是沒有影響的。spa

    如今我內心的觀點是修改後的邏輯(數組從後往前比較)與常規邏輯(從前日後比較)及代碼可閱讀性上,對咱廣大程序員來講仍是小case的,那我覺着能少一個變量的定義、操做,少一行代碼,對我來講都是小小的驕傲啊(我又對代碼進行了優化哇O(∩_∩)O哈哈~)。效率

    如今未查找JDK中數組實現原理,因此暫且結論如上,若有哪位大大給指教一下啊。變量

    而後坐着會繼續找一些JDK的數組實現,再進行比較。

相關文章
相關標籤/搜索