String類中的compareTo原始碼分析(為什麼這樣啊~~!!)
阿新 • • 發佈:2018-12-25
今天看了集合,在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; }
寫個個程式碼驗證
水平有限,如若不準確,還請各位大佬指正~~,感謝~