使用比较器对链接列表进行排序

时间:2017-10-19 05:21:13

标签: java sorting linked-list comparator

我有一个问题。请看下面的代码, 当我想通过使用collections.sort对链表上的数据进行排序时,比较器将在write(collections.sort(...))之后工作,然后再次使用比较器?

是否可以首先使用不带collection.sort(...)的比较器?

  final LinkedList unsorted = new LinkedList(lList);

  Collections.sort(unsorted);

  Collections.sort(unsorted, 
            new Comparator<String>() { 
            @Override public int compare(String s1, String s2) { 
                return s1.length() - s2.length(); 
            } 
        } ); 
  System.out.println("LinkedList (after sorting using Comparator): " + unsorted);

并且有人可以给我一个建议如何通过方法分离比较器排序,我的意思是与主方法分开。

我想要的输出:

Unsorted [75, 2, 0, 1, 10, 25, 60, 40, 70, 2, 3, 4, 5, 6, 10, 15]
LinkedList (after sorting using Comparator): [0, 1, 2, 2, 3, 4, 5, 6, 10, 10, 15, 25, 40, 60, 70, 75]

谢谢

2 个答案:

答案 0 :(得分:1)

在您的代码中尝试此操作。

 Integer[] ints = {75, 2, 0, 1, 10, 25, 60, 40, 70, 2, 3, 4, 5, 6, 10, 15};
 List<Integer> lList = Arrays.asList(ints);
 final LinkedList unsorted = new LinkedList(lList);

 Collections.sort(unsorted);

 System.out.println("LinkedList (after sorting using Comparator): " + unsorted);

答案 1 :(得分:0)

您可以放弃对Collections.sort()的初始调用,只需使用比较器调用一次!

您可以将比较器保存到静态字段并将字段传递给Collections.sort()

但是,你必须提供一些告诉jvm如何订购元素的方法(除非你切换到整数列表)。请参见编辑:

作为最后一点,链接列表上的排序很昂贵,因为它具有线性复杂性(在最坏的情况下必须迭代每个节点),考虑使用TreeSet之类的内容,如前所述

编辑:如果升序足够,如果所有字符串都是数字的话,没有比较器的字符串排序将按预期工作!

此外,您的比较器正在处理字符串长度,因此不会按预期按升序对列表进行排序