2013-04-04 57 views
-1

是他們的另一種方式來那種單獨的用戶輸入的不是「Collections.Sort(名單)方法等輸出框?按字母順序排序沒有排序的方法

import java.util.*; 

public class UserInput 
{ 
public static void main(String[] args) { 
List<String> list = new ArrayList<String>(); 
Scanner stdin = new Scanner(System.in); 

do { 
    System.out.println("Enter a name: "); 
    String strin = stdin.next(); 
    if (isNumeric(strin)) { 
     System.out.println("Please add a non numeric value"); 
    } else { 
     list.add(strin); 
    } 

    Collections.sort(list); 
    System.out.println("Current list is " + list); 
    System.out.println("Add more? (y/n)"); 

} while (stdin.next().startsWith("y")); 

System.out.println("List is " + list); 
String[] arr = list.toArray(new String[0]); 
System.out.println("Array is " + Arrays.toString(arr)); 
} 

public static boolean isNumeric(String str) { 
return str.matches("-?\\d+(\\.\\d+)?"); 
} 
} 
+2

你可以手動實現任意數量的字符串排序算法 - 但爲什麼你不想使用默認的庫實現?如果您不想浪費地重新整理每個條目的整個集合,請使用按插入順序排序的集合,例如TreeSet - > http://docs.oracle.com/javase/6/docs/api/ java/util/TreeSet.html – 2013-04-04 20:27:56

+0

沒有什麼能阻止你實現你想要的任何排序算法。傳統的氣泡排序是首先想到的... – jahroy 2013-04-04 20:29:00

+0

爲什麼重新發明輪子?使用Collections.sort與你自己的比較器,如果你想做一個自定義排序 – Bizmarck 2013-04-04 20:29:29

回答

4

您可以使用一個名稱列表TreeSet存儲的名稱,也可以爲它提供一個Comparator如果你需要自定義排序順序。

編輯

由於@jahroy評論說,它將w^ork,因爲元素(在TreeSet中)在插入時被排序,因此不需要在之後執行任何排序。

+0

沒錯。感謝您的加入。 – NilsH 2013-04-04 20:33:49

+0

@jahroy:你應該更精確。你所說的只適用於'TreeSet',而不是'Set'。 – jlordo 2013-04-04 20:34:54

+0

@jahroy垃圾。設置存儲並按照他們喜歡的任何順序進行迭代。對此的例外是SortedSets(例如TreeSer),它以排序順序進行迭代,以及特殊的LinkedHashSet,它以插入的順序進行迭代。 – Bohemian 2013-04-04 20:36:20