一、核心要点
1、结构图
2、TreeSet实现子类排序要点
1、自定义类需要实现Conparable接口,否则要抛出异常。
2、自定义类中重写的compareTO()方法需要对所有属性进行比较。
否则会出现,有个别属性相同的对象被认为是相同的。
二、完整代码
package collectjh.set;
import java.util.TreeSet;
public class TreeSetSubClassSort {
public static void main(String[] args) {
TreeSet<TreeSetPerson> set = new TreeSet<>();
set.add(new TreeSetPerson("张三" , 18));
set.add(new TreeSetPerson("李四" , 18));
set.add(new TreeSetPerson("王五" , 25));
set.add(new TreeSetPerson("王五" , 25));
set.add(new TreeSetPerson("小强" , 28));
set.forEach(System.out::println);
}
}
class TreeSetPerson implements Comparable<TreeSetPerson> {
private String name;
private int age;
public String getName() {
return name;
}
@Override
public String toString() {
return "TreeSetPerson{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public TreeSetPerson(String name , int age) {
this.name = name;
this.age = age;
}
@Override
public int compareTo(TreeSetPerson o) {
if (this.age > o.age) {
return 1;
} else if (this.age < o.age) {
return -1;
} else {
return this.name.compareTo(o.name);
}
}
}
三、运行结果
TreeSetPerson{name='张三', age=18}
TreeSetPerson{name='李四', age=18}
TreeSetPerson{name='王五', age=25}
TreeSetPerson{name='小强', age=28}