思路:
先将学生类Student私有化成员变量,然后加有参无参构造器,setter、getter方法,然后重写toString方法。
再写第二个类TreeSet,首先注意用泛型为<Student>创建一个创建TreeSet集合,然后用匿名内部类Comparator,重写排序方法,然后因为return根据比较得到1、-1、0比较。
但是如果年龄相同,则要再根据姓名排序,这时需要通过compareTo比较,然后里面需要调getName()方法,然后得到的值也是1、-1、0。所以这些可以加个判断,如果年龄相等的情况,再用姓名排序。
排序后用迭代器遍历TreeSet。
代码:
Student类
public class Student {
private String name;
private int age;
Student(){}
Student(String name,int age){
this.name=name;
this.age=age;
}
@Override
public String toString() {
return "学生{" +
"姓名='" + name + '\'' +
", 年龄=" + 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;
}
}
Treeset类
import java.util.Comparator;
import java.util.Iterator;
import java.util.Set;
public class TreeSet {
public static void main(String[] args) {
Set<Student> students=new java.util.TreeSet<>(new Comparator<Student>() {
@Override
public int compare(Student s1, Student s2) {
int ageCompare=Integer.compare(s1.getAge(),s2.getAge());
if(ageCompare!=0)
return ageCompare;
return s1.getName().compareTo(s2.getName());
}
});
//添加学生
students.add(new Student("张三",20));
students.add(new Student("李四",22));
students.add(new Student("王五",21));
students.add(new Student("赵四",20));
//使用迭代器遍历TreeSet
Iterator<Student> iterator=students.iterator();
System.out.println("排序结果如下:");
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}
}
简化代码:
简化代码,有兴趣的可以看一下
Student类
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Student {
private String name;
private int age;
}
TreeSet类
public class TreeSet {
public static void main(String[] args) {
Set<Student> students=new java.util.TreeSet<>(Comparator.comparingInt(Student::getAge).thenComparing(Student::getName));
//添加学生
students.add(new Student("张三",20));
students.add(new Student("李四",22));
students.add(new Student("王五",21));
students.add(new Student("赵四",20));
//使用迭代器遍历TreeSet
Iterator<Student> iterator=students.iterator();
System.out.println("排序结果如下:");
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}
}