簡體   English   中英

Collections.sort沒有排序任何東西

[英]Collections.sort is not sorting anything

我試圖以一種簡短的方式對String數組進行排序。 我正在嘗試使用Collections.sort,但我不明白為什么它不對任何內容進行排序。 碼:

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);
    }
});

兩種情況下的結果:

  • Poecilia Latipinna
  • 網紋Poecilia
  • 嗜鹽菌
  • 假木耳Ger
  • ....

為什么呢?

Collections.sort(list)絕對可以。 代碼中的問題是排序之前將列表放置到數組中 如果在將列表放入數組之前先對列表進行排序,則應該對數組進行排序

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

/* add elements to namesList */

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

您應該僅在對名稱列表進行排序后才將其nameslist放入FishNamesSorted數組中,而您現在不這樣做。

看一看,

    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);
    }

僅供參考,如果您使用Java 8,則可以使排序過程更快。

Java 8提供了一個使用Arrays.parallelSort(type)對任何類型的數組進行排序的API,它執行與Collection.sort相同的排序方式,但是具有並行實現。

Java Collections Framework>( Collections.sortArrays.sort )提供的當前排序實現都在調用線程中按順序執行排序操作。 此增強功能將提供與Arrays類當前提供的相同的排序操作集,但具有利用Fork / Join框架的並行實現。 這些新的API在調用線程方面仍然是同步的,因為在並行排序完成之前,它不會繼續通過排序操作。

要實現它, Arrays.parallelSort在上面的代碼Arrays.parallelSort Collections.sort替換為Arrays.parallelSort

更換,

Collections.sort(nameslist);

與,

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

解決方案是

Arrays.sort(FishNamesSorted, String.CASE_INSENSITIVE_ORDER)

我誤會了它的工作原理

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM