0.码仙励志
时间是治疗心灵创伤的大师,但绝不是解决问题的高手。
1.普通数字排序
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class ListSortTest {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
list.add(3);
list.add(2);
list.add(2);
list.add(4);
list.add(1);
System.out.println(list);
// 从小到大排序
Collections.sort(list);
System.out.println(list);
// 倒序
Collections.reverse(list);
System.out.println(list);
}
}
运行结果:
[3, 2, 2, 4, 1]
[1, 2, 2, 3, 4]
[4, 3, 2, 2, 1]
2.对象单字段排序
先创建一个对象Student,我们用age来排序
public class Student {
private String name;
private int age;
private int height;
public Student(String name, int age, int height) {
super();
this.name = name;
this.age = age;
this.height = height;
}
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 getHeight() {
return height;
}
public void setHeight(int height) {
this.height = height;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + ", height=" + height + "]";
}
}
开始排序:
这里说一下重写的 public int compareTo(Student o){} 这个方法,它返回三种 int 类型的值:负整数,零 ,正整数。
- 负整数:当前对象的值 < 比较对象的值 , 位置排在前。
- 零:当前对象的值 = 比较对象的值 , 位置不变。
- 正整数:当前对象的值 > 比较对象的值 , 位置排在后。
让Student实现 Comparable 接口,然后重写里面的
compareTo()方法。
public class Student implements Comparable<Student> {
private String name;
private int age;
private int height;
public Student(String name, int age, int height) {
super();
this.name = name;
this.age = age;
this.height = height;
}
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 getHeight() {
return height;
}
public void setHeight(int height) {
this.height = height;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + ", height=" + height + "]";
}
@Override
public int compareTo(Student o) {
// 从大到小
// return o.age - this.age;
// 从小到大
return this.age - o.age;
}
}
测试一下:
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class ListSortTest {
public static void main(String[] args) {
List<Student> list = new ArrayList<Student>();
list.add(new Student("喜羊羊", 25, 175));
list.add(new Student("美羊羊", 18, 165));
list.add(new Student("懒羊羊", 23, 170));
list.add(new Student("沸羊羊", 23, 175));
list.add(new Student("慢羊羊", 80, 169));
System.out.println("默认:");
for (Student student : list) {
System.out.println(student);
}
System.out.println("排序:");
Collections.sort(list);
for (Student student : list) {
System.out.println(student);
}
System.out.println("倒序:");
Collections.reverse(list);
for (Student student : list) {
System.out.println(student);
}
}
}
运行结果:
默认:
Student [name=喜羊羊, age=25, height=175]
Student [name=美羊羊, age=18, height=165]
Student [name=懒羊羊, age=23, height=170]
Student [name=沸羊羊, age=23, height=175]
Student [name=慢羊羊, age=80, height=169]
排序:
Student [name=美羊羊, age=18, height=165]
Student [name=懒羊羊, age=23, height=170]
Student [name=沸羊羊, age=23, height=175]
Student [name=喜羊羊, age=25, height=175]
Student [name=慢羊羊, age=80, height=169]
倒序:
Student [name=慢羊羊, age=80, height=169]
Student [name=喜羊羊, age=25, height=175]
Student [name=沸羊羊, age=23, height=175]
Student [name=懒羊羊, age=23, height=170]
Student [name=美羊羊, age=18, height=165]
3.对象多字段排序
接下来根据age和height排序
把Student的compareTo重写一下
public class Student implements Comparable<Student> {
private String name;
private int age;
private int height;
public Student(String name, int age, int height) {
super();
this.name = name;
this.age = age;
this.height = height;
}
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 getHeight() {
return height;
}
public void setHeight(int height) {
this.height = height;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + ", height=" + height + "]";
}
@Override
public int compareTo(Student o) {
// 从大到小
if (o.age == this.age) {
return o.height - this.height;
}
return o.age - this.age;
}
}
ListSortTest不用变
运行结果:
默认:
Student [name=喜羊羊, age=25, height=175]
Student [name=美羊羊, age=18, height=165]
Student [name=懒羊羊, age=23, height=170]
Student [name=沸羊羊, age=23, height=175]
Student [name=慢羊羊, age=80, height=169]
排序:
Student [name=慢羊羊, age=80, height=169]
Student [name=喜羊羊, age=25, height=175]
Student [name=沸羊羊, age=23, height=175]
Student [name=懒羊羊, age=23, height=170]
Student [name=美羊羊, age=18, height=165]
倒序:
Student [name=美羊羊, age=18, height=165]
Student [name=懒羊羊, age=23, height=170]
Student [name=沸羊羊, age=23, height=175]
Student [name=喜羊羊, age=25, height=175]
Student [name=慢羊羊, age=80, height=169]