Java集合排序最常用的实现方式有两种,面试中也是被经常问到的两种实现方式区别,自己也是写了个小例子来加深一下理解,先说一下这种排序:
- Comparable
在集合内部定义的方法实现排序,需要排序的类实现该接口,内部实现compareto方法,这个方法我们经常比较String的时候会用到,那是因为String本身就实现了Comparable接口。这种比较方法适用于某一类的固定比较,比较学生的分数,就经常会用来作比较,使用也比较简单,直接Collectios.sort(list)即可。 - Comparator
在集合外部实现的排序,也就是说需要比较的实体类不用做任何变化,单独新建一个比较类,实现Comparator接口,使用的时候直接list.sort(定义的类),即可,还比如说学生,除了分数排序外,难免会用姓名,年龄排序,这样的话Comparable就实现不了,那就可以新建一个外部的比较类。
两种排序方法具体还是要根据实际需要来选取,写了个小例子来加深自己的理解,也方便以后面试的时候能比较按照自己的理解回答
package com.zhh.ListDemo;
public class Student implements Comparable<Student> {
public Student(){
}
public Student(String name,int age,int score){
this.name=name;
this.age=age;
this.score=score;
}
private String name;
private int age;
private int score;
public int compareTo(Student stu) {
return stu.age-this.age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + ", score=" + score + "]";
}
}
package com.zhh.ListDemo;
import java.util.Comparator;
public class StudenScoreComparator implements Comparator<Student> {
public int compare(Student stu1, Student stu2) {
return stu1.getScore()-stu2.getScore();
}
}
package com.zhh.ListDemo;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class ListOrderDemo {
public static void main(String[] args) {
List<Student> list = new ArrayList<Student>();
Student stu1 = new Student("stu1",1,3);
Student stu2 = new Student("stu2",3,1);
Student stu3 = new Student("stu2",2,5);
list.add(stu3);
list.add(stu1);
list.add(stu2);
System.out.println(list);
Collections.sort(list);
System.out.println(list);
list.sort(new StudenScoreComparator());
System.out.println(list);
}
}