2015-01-27 14 views
7

Ich versuche, ein String-Array auf eine kurze, einfache Weise zu sortieren. Ich versuche, Collections.sort zu verwenden, aber ich verstehe nicht, warum es nichts sortiert. Code:Collections.sort sortiert nichts

public static String[] FishNamesSorted; 
..... 
List<String> nameslist = new ArrayList<String>(); 
nameslist.toArray(FishNamesSorted); 
Collections.sort(nameslist, String.CASE_INSENSITIVE_ORDER); <--- NOT WORKING 

Collections.sort(nameslist, new Comparator<String>() { <--- NOT WORKING 
    @Override 
    public int compare(String p1, String p2) { 
    if (p1 == null) { 
     return 1; 
    } 
    if (p2 == null) { 
     return -1; 
    } 
    return p1.compareToIgnoreCase(p2); 
    } 
}); 

Ergebnisse in beiden Fällen:

  • Poecilia latipinna
  • Poecilia reticulata
  • Notropis chrosomus
  • Pseudomugil gertrudae
  • ....

Whyyyy?

+0

bist du mit 'List ', poste deinen Code? –

+2

Was ist der Typ von 'Nameslist'? – Eran

+5

Bitte zeigen Sie ein kurzes aber vollständiges Programm, das das Problem demonstriert. 'Collections.sort' definitiv * funktioniert * im Allgemeinen ... –

Antwort

-1

Die Lösung war

Arrays.sort(FishNamesSorted, String.CASE_INSENSITIVE_ORDER) 

Ich hatte missverstanden, wie es funktioniert

5

Collections.sort(list) funktioniert definitiv. Das Problem in Ihrem Code ist Sie haben die Liste in das Array vor dem Sortieren platziert. Das Array sollten, wenn Sie Ihre Liste zuerst, bevor Sie es in das Array

List<String> nameslist = new ArrayList<String>(); 

/* add elements to namesList */ 

Collections.sort(nameslist); 
Object[] fishNamesSorted = nameslist.toArray(); 
0

Sie sind auf Ihre nameslist nur in Ihrem FishNamesSorted Array setzen soll sortieren sortiert werden, nachdem sie sortiert, die Sie jetzt nicht tun.

haben einen Blick,

String[] FishNamesSorted; 

    // creating and initializing list, 
    List<String> nameslist = new ArrayList<String>(); 

    // Adding some data in your list 
    nameslist.add("Poecilia Latipinna"); 
    nameslist.add("Poecilia Reticulata"); 
    nameslist.add("Notropis Chrosomus"); 
    nameslist.add("Pseudomugil Gertrudae"); 

    // sorting your list, 
    Collections.sort(nameslist); 

    // print sorted list 
    for (String s : nameslist){ 
     System.out.println(s); 
    } 

    System.out.println("==================="); 

    // convert the sorted list to an array and assign it 
    // a String array. 
    FishNamesSorted = nameslist.toArray((new String[nameslist.size()])); 

    // print your String array, 
    for (String s : FishNamesSorted){ 
     System.out.println(s); 
    } 

nur FYI, können Sie Ihre Sortierprozess Arbeit noch schneller machen, wenn Sie mit Java 8.

Java 8 eine API für die Sortierung jede Art von Array bietet mit Arrays.parallelSort(type), es führt Sortierung auf die gleiche Weise wie Collection.sort, aber mit einer parallelen Implementierung.

aktuelle Sortier bereitgestellt Implementierungen der Java Collections Rahmen> (Collections.sort und Arrays.sort) alle führen den Sortier Betrieb sequentiell in der aufrufenden Thread. Diese Erweiterung bietet den gleichen Satz von Sortieroperationen, die derzeit von der Klasse Arrays bereitgestellt werden, aber mit einer parallelen Implementierung, die das Fork/Join-Framework verwendet. Diese neuen APIs sind immer noch synchron bezüglich mit dem aufrufenden Thread, da sie nicht über die Sortieroperation hinausgehen werden, bis die parallele Sortierung abgeschlossen ist.

ihn umzusetzen, ersetzen Collections.sort mit Arrays.parallelSort in dem obigen Code,

, ersetzen

Collections.sort(nameslist); 

mit,

Arrays.parallelSort(nameslist.toArray(new String[nameslist.size()])); 
Verwandte Themen