List<Integer> list = new ArrayList<Integer>();
list.add(3);
list.add(1);
list.add(2);
//Collections类中的静态方法sort是可以对List集合进行排序操作的
Collections.sort(list);
System.out.println(list); // [1, 2, 3]
注意:但是,这只能对数值,英文字符串等基础数据结构进行排序,有局限。
如果一个list集合中存放的是User对象,需要按照年龄age升序排序,那就需要自定义比较规则了。
User类:
public class User {
int age;
int name;
public User(int age, int name) {
this.age = age;
this.name = name;
}
}
重构User类如下:
public class User implements Comparable<User>{
int age;
String name;
public User(int age, String name) {
this.age = age;
this.name = name;
}
// 重写compareTo,该方法返回int值,不在乎具体值是多少,只在乎该值是 >0,<0还是=0
// <0:当前对象比传入对象小。
// =0:当前对象等于传入对象。
// >0:当前对象比传入对象大。
@Override
public int compareTo(User o) {
//比较条件我们定的是按照age升序
int s = this.age - o.age;
return s;
}
@Override
public String toString() {
return "User [age=" + age + ", name=" + name + "]";
}
}
测试代码:
List<User> list = new ArrayList<User>();
list.add(new User(3,"小李"));
list.add(new User(1,"小张"));
list.add(new User(2,"小王"));
Collections.sort(list);
System.out.println(list); //[User [age=1, name=小张], User [age=2, name=小王], User [age=3, name=小李]]
注意:不是让User去实现该接口,而是另外定义一个类去实现,相比于让User去实现Comparable接口,代码耦合性更低。
//User是不作任何改动的
public class User{
int age;
String name;
public User(int age, String name) {
this.age = age;
this.name = name;
}
@Override
public String toString() {
return "User [age=" + age + ", name=" + name + "]";
}
}
//定义如下:可以理解为该类MyRule是一个专门用来定义比较规则的类,耦合性更低。
public class MyRule implements Comparator<User>{
@Override
public int compare(User o1, User o2) {
return o1.age - o2.age;
}
}
测试:
List<User> list = new ArrayList<User>();
list.add(new User(3,"小李"));
list.add(new User(1,"小张"));
list.add(new User(2,"小王"));
//sort(集合,比较器)
Collections.sort(list,new MyRule());
System.out.println(list); //[User [age=1, name=小张], User [age=2, name=小王], User [age=3, name=小李]]