1. 程式人生 > >String類中的compareTo原始碼分析(為什麼這樣啊~~!!)

String類中的compareTo原始碼分析(為什麼這樣啊~~!!)

    今天看了集合,在treeset中,要自定義排序,需要實現comparable介面(比較器排序),或者自己給出compareTo方法(自然排序),但是實現comparable介面,自己寫邏輯這個還好理解一點,但是對於這個compareTo我還是有的懵逼-->因為我看到說

Comparable介面是對應TreeSet的無參構造方法      
數值型資料   --->      數字的大小
字元                          ASCII碼不夠,Unicode值進行比較
字串                      Unicode比較

然後想到了中文字串排序!!!

原來有這種操作!!!看來還是知識面太窄~~

就跑去看了看原始碼

//jdk1.8 
 public int compareTo(String anotherString) {
        int len1 = value.length;
        int len2 = anotherString.value.length;
        int lim = Math.min(len1, len2);//找到兩個字串中長度最小那個-->return (a <= b) ? a : b;
        char v1[] = value;//我理解的是把字串轉成字元陣列--在根據碼錶值進行判斷
        char v2[] = anotherString.value;

        int k = 0;
        while (k < lim) {
            char c1 = v1[k];
            char c2 = v2[k];
            if (c1 != c2) {
                return c1 - c2;
            }
            k++;
        }
        return len1 - len2;
    }

寫個個程式碼驗證

水平有限,如若不準確,還請各位大佬指正~~,感謝~