TreeSet
Collection:
List:
Set:
HashSet:
- LinkedHashSet:
TreeSet: 底层数据结构是红黑树(自平衡二叉树),具备了可预测的排序
- 自然排序
- 比较器排序
TreeSet中的add方法实际上是调用了TreeMap中的put方法
import java.util.TreeSet;
public class TreeSetDemo1 {
public static void main(String[] args) {
TreeSet<String> set1 = new TreeSet<>();
set1.add("strawberry");
set1.add("grape");
set1.add("mango");
set1.add("apple");
set1.add("strawberry");
set1.add("banana");
set1.add("coconut");
for (String s : set1) {
System.out.println(s);
}
}
}
存储自定义对象
实现Comparable接口
要想使用TreeSet集合存储自定义对象且使用的是无参构造方法创建TreeSet集合对象的话,
需要元素类型实现Comparable<元素类型>接口,实现compareTo方法
compareTo方法根据需求来定制
public class Teacher implements Comparable<Teacher>{
private String name;
private int age;
public Teacher() {
}
public Teacher(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;
}
@Override
public String toString() {
return "Teacher{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public int compareTo(Teacher o) {
int i1 = this.age - o.getAge();
return (i1==0)?this.name.compareTo(o.name):i1;
}
}
public class TreeSetDemo2 {
public static void main(String[] args) {
TreeSet<Teacher> set1 = new TreeSet<>();
Teacher t1 = new Teacher("笑哥", 18);
Teacher t2 = new Teacher("小虎", 15);
Teacher t3 = new Teacher("凯哥", 17);
Teacher t4 = new Teacher("笑哥", 18);
Teacher t5 = new Teacher("杨老板", 18);
set1.add(t1);
set1.add(t2);
set1.add(t3);
set1.add(t4);
set1.add(t5);
for (Teacher teacher : set1) {
System.out.println(teacher);
}
}
}
Comparator匿名内部类
import java.util.Comparator;
import java.util.TreeSet;
public class TreeSetDemo3 {
public static void main(String[] args) {
TreeSet<Cat> set1 = new TreeSet<>(new Comparator<Cat>() {
@Override
public int compare(Cat o1, Cat o2) {
int i1 = o1.getAge() - o2.getAge();
return (i1 == 0) ? o1.getName().compareTo(o2.getName()) : i1;
}
});
Cat c1 = new Cat("汤姆", 8);
Cat c2 = new Cat("黑猫警长", 2);
Cat c3 = new Cat("加菲猫", 4);
Cat c4 = new Cat("汤姆", 8);
Cat c5 = new Cat("哆啦A梦", 6);
set1.add(c1);
set1.add(c2);
set1.add(c3);
set1.add(c4);
set1.add(c5);
for (Cat cat : set1) {
System.out.println(cat);
}
}
}
Test
import java.util.Comparator;
import java.util.Scanner;
import java.util.TreeSet;
public class TreeSetTest1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
TreeSet<Student2> set1 = new TreeSet<>(new Comparator<Student2>() {
@Override
public int compare(Student2 o1, Student2 o2) {
int i1 = o2.getSumScore() - o1.getSumScore();
int i2 = (i1 == 0) ? o2.getChinese() - o1.getChinese() : i1;
int i3 = (i2 == 0) ? o2.getMath() - o1.getMath() : i2;
return (i3 == 0) ? o2.getName().compareTo(o1.getName()) : i3;
}
});
for(int i=1;i<=5;i++){
System.out.println("请输入第 "+i+" 个学生的信息");
System.out.print("请输入姓名: ");
String name = sc.next();
System.out.print("请输入该学生的语文成绩: ");
int chinese = sc.nextInt();
System.out.print("请输入该学生的数学成绩: ");
int math = sc.nextInt();
System.out.print("请输入该学生的英语成绩: ");
int english = sc.nextInt();
set1.add(new Student2(name,chinese,math,english));
}
System.out.println("学生信息录入完毕!!");
System.out.println("================= 学生成绩汇总 ===================");
System.out.println("姓名\t\t语文成绩\t\t数学成绩\t\t英语成绩\t\t总分");
for (Student2 student2 : set1) {
System.out.println(student2.getName()+"\t\t"+
student2.getChinese()+"\t\t"+
student2.getMath()+"\t\t"+
student2.getEnglish()+"\t\t"+
student2.getSumScore());
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix