2013-05-09 62 views
0

我想排序由數字和字母組成,一旦整理將是列表的例子的字符串的ArrayList:ArrayList的

name 1 
name 2 
name 3 
name 11 
name 12 
name 13 

但是當我使用collections.sort ()它排序是這樣的:

name 1 
name 11 
name 12 
name 13 
name 2 
name 3 

任何想法什麼樣的我正在尋找的類型將被稱爲還是怎麼辦呢?

回答

7

String s默認情況下按字母順序排列。您需要實現自己的Comparator<String>或使用實現Comparable(或使用Comparator)的對象來解決此問題,尤其是因爲您正在使用的String是詞和整數的混合。

1

執行comprable,重寫compareTo,解析出名字出來,然後你可以通過它們進行排序。你想通過數字或兩者

0

您可以使用HashMap<Integer,String> map負全部排序,可以排序它

1

這是因爲它是按字母順序排序,尋找一次一個字符。

name 13 
name 2 

這裏, 「name」 是同一個零件,向前走,你有 「1」 和 「2」。 12之前。請記住132只是字符串這裏不是數字。您可以write your own comparator。實現你正在嘗試的。

0

被別人當作建議,您可以編寫自己的Comparator如下圖所示

 Comparator<? super String> myComparator = new Comparator<String>() { 

     public int compare(String name1, String name2) { 
      int num1 = Integer.parseInt(name1.split(" ")[1]); 
      int num2 = Integer.parseInt(name2.split(" ")[1]); 
      // > : Increasing order 
      // < : Decreasing order 
      if(num1 < num2) 
        return 1; 
      else 
        return -1; 
     } 

     }; 
     Collections.sort(names, myComparator); 

輸出:

名91
名12
名11
名2