我有一个问题。请看下面的代码, 当我想通过使用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]
谢谢
答案 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
之类的内容,如前所述
编辑:如果升序足够,如果所有字符串都是数字的话,没有比较器的字符串排序将按预期工作!
此外,您的比较器正在处理字符串长度,因此不会按预期按升序对列表进行排序