Collections.sort的自定义排序
时间: 2024-02-05 15:45:31 浏览: 23
可以通过实现Comparator接口,并在Comparator的compare方法中定义自定义的比较规则来实现Collections.sort的自定义排序。在调用Collections.sort时,将自定义的Comparator作为参数传入即可实现自定义排序。例如,以下代码实现了对一个Animal类的List进行按年龄升序排序的自定义排序:
```
class Animal {
String name;
int age;
// 省略getter和setter方法
}
class AgeComparator implements Comparator<Animal> {
public int compare(Animal a1, Animal a2) {
return a1.getAge() - a2.getAge();
}
}
public static void main(String[] args) {
List<Animal> animalList = new ArrayList<>();
// 省略对animalList进行初始化的代码
Collections.sort(animalList, new AgeComparator());
}
```
相关问题
Collections.sort()自定义排序用法举例
当使用Collections.sort()方法进行自定义排序时,需要实现接口Comparator并重写compare()方法。以下是一个例子:
假设我们有一个类Person,其中包含姓名和年龄两个属性:
```
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
```
现在我们想要按照年龄从小到大排序,可以这样实现:
```
List<Person> personList = new ArrayList<>();
personList.add(new Person("Jack", 25));
personList.add(new Person("Lucy", 18));
personList.add(new Person("Tom", 30));
// 自定义排序
Collections.sort(personList, new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
return o1.getAge() - o2.getAge();
}
});
// 输出排序结果
for (Person person : personList) {
System.out.println(person.getName() + ":" + person.getAge());
}
```
输出结果:
```
Lucy:18
Jack:25
Tom:30
```
在这个例子中,我们重写了compare()方法,实现了按照年龄从小到大排序。然后使用Collections.sort()方法对personList进行排序并输出结果。
Collections.sort 怎么排序的
Collections.sort() 方法是 Java 中用于对 List 集合进行排序的方法。默认情况下,它使用的是归并排序(Merge Sort)算法。在排序过程中,它会将 List 分成若干个小的 List,然后对这些小的 List 进行排序,最后再将这些有序的小的 List 合并成一个有序的大的 List。
排序时需要注意的是,被排序的元素必须实现了 Comparable 接口或者传入了 Comparator 接口的实现类对象作为比较器,否则会抛出 ClassCastException 异常。在 Comparable 接口中定义了 compareTo() 方法,该方法用于自定义元素的比较规则,而 Comparator 接口中定义了 compare() 方法,该方法也用于自定义元素的比较规则。