Collections.sort不排序任何东西

我试图用简单的方法对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 Reticulata
  • Notropis Chrosomus
  • Pseudomugil Gertrudae
  • ....
  • Whyyyy?


    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替换Collections.sort

    更换,

    Collections.sort(nameslist);
    

    用,

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

    解决方案是

    Arrays.sort(FishNamesSorted, String.CASE_INSENSITIVE_ORDER)
    

    我误解了它的工作原理

    链接地址: http://www.djcxy.com/p/83417.html

    上一篇: Collections.sort is not sorting anything

    下一篇: Wildfly 8 Basic Authentication