Java中提供了默认的对集合的排序方法,比如Collections.sort()方法,这是默认按照字典的顺序排序的。
1.实现Comparable接口
class Person implements Comparable<Person>{
private String name;
private String gender;
private int age;
public Person(String name, String gender, int age) {
this.name = name;
this.gender = gender;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public int compareTo(Person person) { //重写Comparable接口的compareTo方法,
return this.age - person.getAge(); // 根据年龄升序排列,降序修改相减顺序即可
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", gender='" + gender + '\'' +
", age=" + age +
'}';
}
}
public class Test2 {
public static void main(String[] args) {
List list = new LinkedList();
Person s1 = new Person("张三","男",20);
Person s2 = new Person("李四","女",18);
Person s3 = new Person("王五","男",21);
Person s4 = new Person("赵六","女",22);
list.add(s1);
list.add(s2);
list.add(s3);
list.add(s4);
Collections.sort(list);
for(Object obj: list){
System.out.println(obj);
}
}
}
运行结果:
Person{name='李四', gender='女', age=18}
Person{name='张三', gender='男', age=20}
Person{name='王五', gender='男', age=21}
Person{name='赵六', gender='女', age=22}
2.实现Comparator接口
class Person {
private String name;
private String gender;
private int age;
public Person(String name, String gender, int age) {
this.name = name;
this.gender = gender;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", gender='" + gender + '\'' +
", age=" + age +
'}';
}
}
public class Test2 {
public static void main(String[] args) {
List list = new LinkedList();
Person s1 = new Person("张三", "男", 20);
Person s2 = new Person("李四", "女", 18);
Person s3 = new Person("王五", "男", 21);
Person s4 = new Person("赵六", "女", 22);
list.add(s1);
list.add(s2);
list.add(s3);
list.add(s4);
//匿名内部类实现排序
Collections.sort(list, new Comparator<Person>() {
@Override
public int compare(Person p1, Person p2) {
int diff = p1.getAge() - p2.getAge();
if (diff > 0) {
return 1;
} else if (diff < 0) {
return -1;
}
return 0; //相等为0
}
});
for (Object obj : list) {
System.out.println(obj);
}
}
}
运行结果:
Person{name='李四', gender='女', age=18}
Person{name='张三', gender='男', age=20}
Person{name='王五', gender='男', age=21}
Person{name='赵六', gender='女', age=22}
小结:
List序列实现元素排序使用Collections.sort(List list)和Collections.sort(List list,Comparator comparator)方法实现。