2014-02-19 72 views
-1

是否有人可以解釋輸出下面的函數:字符串是如何排序的?

public static void main(String args[]) { 
    String str1 = new String("20"); 
    String str2 = new String("100"); 
    List<String> list = new ArrayList<>(); 
    list.add(str1); 
    list.add(str2); 
    Collections.sort(list); // list is [100,20] now 
} 

我希望排序在ASCII值工作的輸入,即49 1,50 2等。

有人可以確認嗎?

+0

字符串按字母順序 – Baldrick

+0

由於「1」來分類小於「2」,沒有需要繼續檢查其他數字。 – Maroun

+2

http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#compareTo(java.lang.String) –

回答

7

所以Collections.sort()排序Comparable對象的列表,使用每一個Comparable對象具有compareTo()方法。對於Stringthe docs describes this as

按字母順序比較兩個字符串。該比較基於字符串中每個字符的Unicode值 。由該String對象表示的字符序列是 按字母順序與參數字符串表示的字符序列進行比較。

它然後繼續描述兩種不同的字符串的字典序爲使用以下方法進行計算:

如果兩個字符串不同,則要麼它們在某個索引 是不同的字符兩個字符串的有效索引,或者它們的長度都不相同,或者兩者都有。如果他們 在一個或多個索引位置具有不同的字符,則令k爲最小的這樣的索引;那麼通過使用<運算符確定位置k處的字符具有較小值的字符串,按字典順序在另一字符串之前。在這種情況下, 的compareTo返回兩個字符值中的位置k在兩個 串的差 - 即,值:

this.charAt(k)-anotherString.charAt(k) 

如果在它們沒有不同的索引位置,則較短的字符串 按字典順序位於較長的字符串之前。在這種情況下,的compareTo返回字符串的長度的差 - 即,值:

this.length()-anotherString.length() 
3

字符串按照字典順序排列,即按字母順序排列,基於形成它們的字符的整型值。

1

當排序的集合,該compareTo()方法中,在Comparable接口定義被使用。這意味着排序的順序是特定於類的類型,在這種情況下爲java.lang.String

當你看到從StringcompareTo()方法的API文檔,然後你會看到它說:

比較兩個字符串按字典順序。該比較基於字符串中每個字符的統一碼值 。由此String對象表示的字符序列 按字典順序與參數字符串表示的 字符序列進行比較。

因此,在短期而言,按字母順序排序,並自到來之前,這將是第一次。

如果要更改該訂單,可以使用Collections.sort()方法並提供Comparator參數。

0

它在第一所以比較12什麼結果2是更大,所以排序的行爲將在此時間內完成,

認爲你有這個兩號110112

什麼其結果是:

起初它比較11所以他們是平等的,所以它進入下一步

再次11所以去下一步

這裏比較02這裏排序的行爲將完成