利用Comparator比较器进行
- 存储学生对象并遍历,创建TreeSet集合使用 带参构造方法
要求:按照年龄从小到大排序,年龄相同时,按照姓名的字母顺序排序 - 结论:用TreeSet集合存储自定义对象,带构造方法使用的是比较器排序对元素进行排序的
比较器排序,就是让集合构造方法接收Comparator的实现类对象,重写compare(To1,To2)方法
重写方法是,一定要注意排序规则必须按照主要条件和次要条件写 - 图:
以图片和内容形式讲解
图:
代码:
Student类
package CCom.Cnn;
public class Student {
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
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;
}
}
Im实现类
package CCom.Cnn;
import java.util.Comparator;
public class Im implements Comparator<Student>{
@Override
public int compare(Student o1, Student o2) {
//Student o1, Student o2
//this. o2.
//注意使用比较排序时,是调用方法来进行比较,比较一定要有主次条件在内
//age
int num=o1.getAge()-o2.getAge();
//name
int num2=num==0?o1.getName().compareTo(o2.getName()):num;
return num;
}
}
Demo类
package CCom.Cnn;
import java.util.Comparator;
import java.util.TreeSet;
public class Demo {
public static void main(String[] args) {
//建立集合对象,通过有参构造方法接收Comparator的实现类对象,重写compare(To1,To2)方法,来实现比较
Comparator<Student> a=new Im();//以多态的形式实现Comparator接口
TreeSet<Student> ss = new TreeSet<>(a);
//建立学生对象,添加信息
Student s0 = new Student("feiYangYang",19);
Student s1 = new Student("xiYangYang",12);
Student s2 = new Student("caiXuKun",28);
Student s3 = new Student("q iaoBiLuo",60);
Student s4 = new Student("feiYangYang",19);
//集合中添加内容
ss.add(s0);
ss.add(s1);
ss.add(s2);
ss.add(s3);
ss.add(s4);
//foreach循环遍历
for (Student x:ss) {
System.out.println(x.getName()+","+x.getAge());
}
}
}
输出的内容:
xiYangYang,12
feiYangYang,19
caiXuKun,28
q iaoBiLuo,60
方法二:可在Demo类中可以以匿名类的方式代入TreeSet有参构造方法中(可以不用创建Im类)
Demo类
package CCom.Cnn;
import java.util.Comparator;
import java.util.TreeSet;
public class Demo {
public static void main(String[] args) {
//建立集合对象,通过有参构造方法接收Comparator的实现类对象,重写compare(To1,To2)方法,来实现比较
TreeSet<Student> ss = new TreeSet<>(new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
int num=o1.getAge()-o2.getAge();
int num2=num==0?o1.getName().compareTo(o2.getName()):num;
return num2;
}
});
//建立学生对象,添加信息
Student s0 = new Student("feiYangYang",19);
Student s1 = new Student("xiYangYang",12);
Student s2 = new Student("caiXuKun",28);
Student s3 = new Student("q iaoBiLuo",60);
Student s4 = new Student("feiYangYang",19);
//集合中添加内容
ss.add(s0);
ss.add(s1);
ss.add(s2);
ss.add(s3);
ss.add(s4);
//foreach循环遍历
for (Student x:ss) {
System.out.println(x.getName()+","+x.getAge());
}
}
}