求助关于在java中Collections问题,麻烦大佬帮忙看看~

用Collections的sort方法排序一个类的多个对象

这个类一定要实现Comparable接口吧?

写好CompareTo方法后,再主函数里调用Collections.sort()才能实现排序

但是在jdk 的 src.zip 中java.util.Collections的源代码中
不带比较器的sort方法代码是:
public static <T extends Comparable<? super T>> void sort(List<T> list) {
Object[] a = list.toArray();
Arrays.sort(a);
ListIterator<T> i = list.listIterator();
for (int j=0; j<a.length; j++) {
i.next();
i.set((T)a[j]);
}
}

代码的意思是将列表转化为数组,对数组进行排序,再将数组元素逐一储存
到列表里,是这样吧?

里面并没涉及Comparable接口的compareTo方法,那么它是如何知道我的排序方式的呢 ?

翻过高山走不出你
浏览 280回答 1
1回答

慕后森

我给你看个例子你就知道了这里有一个Person类,里面有firstName and surename2个成员。你的类要实现那个Comparable接口。然后在compareTo函数里决定如果排序,在这个例子里是按照surename排序,surename相同的就按照firstName排序的。希望这个例子对你了解自定义的排序有帮助。import java.util.Arrays;class Person implements Comparable<Person> {public Person(String firstName, String surname) {this.firstName = firstName;this.surname = surname;}public String toString() {return firstName + " " + surname;}public int compareTo(Person person) {int result = surname.compareTo(person.surname);return result == 0 ? firstName.compareTo(((Person) person).firstName) : result;}private String firstName;private String surname;}public class MainClass {public static void main(String[] args) {Person[] authors = { new Person("A", "B"),new Person("C", "D"),new Person("E", "F"),new Person("Z", "Y"),new Person("X", "T"),new Person("O", "R") };Arrays.sort(authors);System.out.println("\nThe cast is ascending sequence is:\n");for (Person person : authors) {System.out.println(person);}}}对于你提到的那个问题,你可以去看卡你 Arrays.sort(a)的代码。
打开App,查看更多内容
随时随地看视频慕课网APP