1.基本数据类型的简单排序
public class Demo01 {
public static void main(String[] args) {
List<Integer> list = Arrays.asList(1,5,2,0,-1);
Collections.sort(list);
System.out.println(list);
}
}
(1)Collections.sort(list)分析:
@SuppressWarnings("unchecked")
public static <T extends Comparable<? super T>> void sort(List<T> list) {
list.sort(null);
}
需要继承Comparable,在我们的基本数据类型的包装类中,都是实现了Comparable接口,同时实现了compareTo方法。
2.实体类按照属性排序
(1)自定义类:
//首先必须要实现Comparable接口,并重写compareTo方法--》compareTo是进行排序的一种规范
//一般不建议使用,真实开发中,实体类尽量不要去进行修改
class Emp implements Comparable{
private Integer id;
private String name;
public Emp() {
}
public Emp(Integer id, String name) {
this.id = id;
this.name = name;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Emp{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
@Override
public int compareTo(Object o) {
//需要强制转化
Emp emp = (Emp)o;
return this.id.compareTo(emp.id);
}
}
public class Demo01 {
public static void main(String[] args) {
List<Emp> list = Arrays.asList(new Emp(5,"张三"),new Emp(2,"王五"));
Collections.sort(list);
System.out.println(list);
}
}
和第一个案例的Integer是一样的,只要实现Comparable即可使用Collections.sort方法进行排序。
(2)此方法推荐使用:
public class Demo01 {
public static void main(String[] args) {
List<Emp> list = Arrays.asList(new Emp(5,"张三"),new Emp(2,"王五"));
Collections.sort(list, new Comparator<Emp>() {
@Override
public int compare(Emp o1, Emp o2) {
return o1.getId().compareTo(o2.getId());
}
});
System.out.println(list);
}
}
---------------源码分析(Collections)-------------------
public static <T> void sort(List<T> list, Comparator<? super T> c) {
list.sort(c);
}
可以通过匿名内部类的形式,直接重写compareTo方法。