Collections.sort没有排序任何东西

时间:2015-01-27 13:29:25

标签: java sorting collections

我正在尝试以简短的方式对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?

3 个答案:

答案 0 :(得分:5)

Collections.sort(list)绝对有效。代码中的问题是您在排序之前将列表放入数组。如果在将列表放入数组之前先对列表进行排序,则应对数组进行排序

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

/* add elements to namesList */

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

答案 1 :(得分:0)

您应该在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); } 数组中,而您现在没有这样做。

看看,

Arrays.parallelSort(type)

仅供参考,如果您使用的是Java 8,则可以更快地完成排序过程。

Java 8提供了一个API,用于使用Collection.sort对任何类型的数组进行排序,它以与Collections.sort相同的方式执行排序,但具有并行实现。

  

Java Collections提供的当前排序实现   框架&gt; (Arrays.sortCollections.sort)都执行排序   在调用线程中顺序操作。这个增强会   提供目前提供的同一组排序操作   数组类,但使用了并行实现   Fork / Join框架。这些新的API仍然是同步的   到调用线程,因为它不会继续进行排序   操作直到并行排序完成。

要实现它,请在上面的代码中将Arrays.parallelSort替换为Collections.sort(nameslist);

替换,

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

用,

{{1}}

答案 2 :(得分:-1)

解决方案是

Arrays.sort(FishNamesSorted, String.CASE_INSENSITIVE_ORDER)

我误解了它的运作方式