比较器排序
- 比较器排序:
采用有参构造,构造的参数就要一个比较器
TreeSet(Comparator<? super E> comparator)
- 在创建TreeSet 对象的时候,传进来一个比较器的子类对象
根据子类对象重写比较器中compare 方法,根据此方法的返回值的正负和0,来排序元素,返回0就不往里面存
a.构造一个新的空 TreeSet,它根据指定比较器进行排序。
b.接口 Comparator 比较器
c.int compare(T o1, T o2) 比较方法
d.比较用来排序的两个参数。
public class MyTest3 {
public static void main(String[] args) {
TreeSet t = new TreeSet<>(new Comparator<Integer>() {
@Override
public int compare(Integer s1, Integer s2) {
return s1 - s2;
}
});
t.add(6);
t.add(6);
t.add(3);
t.add(2);
t.add(1);
t.add(4);
t.add(5);
t.add(4);
t.add(3);
System.out.println(t);
}
}
- 举例:键盘录入3个学生信息(姓名,语文成绩,数学成绩,英语成绩),按照总分从高到低输出到控制台。
public class Student {
private String name;
private double mathScore;
private double englishScore;
private double totalScote;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getMathScore() {
return mathScore;
}
public void setMathScore(double mathScore) {
this.mathScore = mathScore;
}
public double getEnglishScore() {
return englishScore;
}
public void setEnglishScore(double englishScore) {
this.englishScore = englishScore;
}
public double getTotalScote() {
return this.englishScore+this.mathScore;
}
}
public class MyTest2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
TreeSet<Student> treeSet = new TreeSet<Student>(new Comparator<Student>() {
@Override
public int compare(Student s1, Student s2) {
return (int) (s1.getTotalScote() - s2.getTotalScote());
}
});
for (int i = 1; i <= 3; i++) {
System.out.println("请输入学生的姓名");
Student student = new Student();
String name = sc.next();
student.setName(name);
System.out.println("请输入第" + i + "个学生" + name + "的数学成绩");
double mathScore = sc.nextDouble();
student.setMathScore(mathScore);
System.out.println("请输入第" + i + "个学生" + name + "的英语成绩");
double englishScore = sc.nextDouble();
student.setEnglishScore(englishScore);
treeSet.add(student);
}
System.out.println("姓名" + "\t" + "数学成绩" + "\t" + "总分");
for (Student stu : treeSet) {
System.out.println(stu.getName() + "\t" + stu.getMathScore() + "\t" + stu.getEnglishScore() + "\t" + stu.getTotalScote());
}
}
}