使用比较器对链表进行排序
Sort Linked List with Comparator
我有一个问题。请看下面我的代码,
当我想使用 collections.sort 对链表上的数据进行排序时,比较器将在写入后工作 (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]
谢谢
您可以放弃对 Collections.sort()
的初始调用,只需使用比较器调用一次即可!
您可以将比较器保存到静态字段并将该字段传递给 Collections.sort()
但是,您必须提供一些方法来告诉 jvm 如何对元素进行排序(除非您切换到整数列表)。请参阅编辑:
最后一点,由于线性复杂性(在最坏的情况下必须迭代每个节点),链表上的排序很昂贵,请考虑使用之前建议的类似 TreeSet
的方法
编辑:如果升序足够,如果所有字符串都是数字,则没有比较器的字符串排序将按预期工作!
您的比较器还在处理字符串长度,因此这不会按预期对列表进行升序排序
在您的代码中试试这个。
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);
我有一个问题。请看下面我的代码, 当我想使用 collections.sort 对链表上的数据进行排序时,比较器将在写入后工作 (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]
谢谢
您可以放弃对 Collections.sort()
的初始调用,只需使用比较器调用一次即可!
您可以将比较器保存到静态字段并将该字段传递给 Collections.sort()
但是,您必须提供一些方法来告诉 jvm 如何对元素进行排序(除非您切换到整数列表)。请参阅编辑:
最后一点,由于线性复杂性(在最坏的情况下必须迭代每个节点),链表上的排序很昂贵,请考虑使用之前建议的类似 TreeSet
的方法
编辑:如果升序足够,如果所有字符串都是数字,则没有比较器的字符串排序将按预期工作!
您的比较器还在处理字符串长度,因此这不会按预期对列表进行升序排序
在您的代码中试试这个。
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);