创建一个Student对象 含有name, age属性
按照name的长度排序 长度相等按照姓名的大小排序 大小相等 按照age的大小排序
方法一:
//创建Student的类 实现 Comparable 接口并且重载compareTo方法
public class Student implements Comparable<Student> {
private String name;
private int 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;
}
public Student() {
super();
// TODO Auto-generated constructor stub
}
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
@Override
public int compareTo(Student s) {
// TODO Auto-generated method stub
//按照姓名的长度进行排序
int num = this.name.length() - s.name.length();
//长度相同 按照姓名大小排序
int num2 = num == 0 ? this.name.compareTo(s.name) : num;
//长度和姓名都相等 按照大小排序
int num3 = num2 == 0 ? this.age - s.age : num2;
return num3;
}
//在main实现
public static void main(String[] args) {
TreeSet<Student> set = new TreeSet<Student>();
Student stu1 = new Student("zhangwuji",35);
Student stu2 = new Student("zhaomin",28);
Student stu3 = new Student("zhouzhiruo",30);
Student stu4 = new Student("xiexun",50);
Student stu5 = new Student("meijueshitai",48);
Student stu6 = new Student("zhangsanfeng",88);
Student stu7 = new Student("zhaomin",28);
Student stu8 = new Student("zhouzhiruo",20);
set.add(stu1);
set.add(stu2);
set.add(stu3);
set.add(stu4);
set.add(stu5);
set.add(stu6);
set.add(stu7);
set.add(stu8);
for(Student student : set){
System.out.println(student.toString());
}
}
方法二:
//创建一个MyCompartor的类 实现 Comparator 接口并且重载compare方法
public class MyCompartor implements Comparator<Student> {
@Override
public int compare(Student o1, Student o2) {
//按照姓名的长度进行排序
int num = o1.getName().length() - o2.getName().length();
//长度相同 按照姓名大小排序
int num2 = num == 0 ? o1.getName().compareTo(o2.getName()) : num;
//长度和姓名都相等 按照大小排序
int num3 = num2 == 0 ? o1.getAge() - o2.getAge() : num2;
return num3;
}
}
//创建Student类
public class Student{
private String name;
private int 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;
}
public Student() {
super();
// TODO Auto-generated constructor stub
}
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
}
//main 实现
public static void main(String[] args) {
Comparator<Student> com = new MyCompartor();
TreeSet<Student> set = new TreeSet<Student>(com);
Student stu1 = new Student("zhangwuji",35);
Student stu2 = new Student("zhaomin",28);
Student stu3 = new Student("zhouzhiruo",30);
Student stu4 = new Student("xiexun",50);
Student stu5 = new Student("meijueshitai",48);
Student stu6 = new Student("zhangsanfeng",88);
Student stu7 = new Student("zhaomin",28);
Student stu8 = new Student("zhouzhiruo",20);
set.add(stu1);
set.add(stu2);
set.add(stu3);
set.add(stu4);
set.add(stu5);
set.add(stu6);
set.add(stu7);
set.add(stu8);
for(Student student : set){
System.out.println(student.toString());
}
}
方法三:
//和方法二一样创建Student类 此处省略
//直接在main函数排序
public static void main(String[] args) {
TreeSet<Student> set = new TreeSet<>(new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
// TODO Auto-generated method stub
//按照姓名的长度进行排序
int num = o1.getName().length() - o2.getName().length();
//长度相同 按照姓名大小排序
int num2 = num == 0 ? o1.getName().compareTo(o2.getName()) : num;
//长度和姓名都相等 按照大小排序
int num3 = num2 == 0 ? o1.getAge() - o2.getAge() : num2;
return num3;
}
});
Student stu1 = new Student("zhangwuji",35);
Student stu2 = new Student("zhaomin",28);
Student stu3 = new Student("zhouzhiruo",30);
Student stu4 = new Student("xiexun",50);
Student stu5 = new Student("meijueshitai",48);
Student stu6 = new Student("zhangsanfeng",88);
Student stu7 = new Student("zhaomin",28);
Student stu8 = new Student("zhouzhiruo",20);
set.add(stu1);
set.add(stu2);
set.add(stu3);
set.add(stu4);
set.add(stu5);
set.add(stu6);
set.add(stu7);
set.add(stu8);
for(Student student : set){
System.out.println(student.toString());
}
}
控制台结果均如下:
![](https://img.haomeiwen.com/i1433429/e8255d809459a33b.png)
网友评论