Java集合详解——TreeSet类

1. 基本介绍和使用

(1)TreeSet实现了Set接口,是Set接口的实现子类,底层是TreeMap。

(2)使用无参构造器,创建TreeSet,通过add方法直接添加元素,最后添加的结果仍然是无序的。

(3)想要添加的元素,按照字符串首字母顺序大小来排序,使用TreeSet提供的一个构造器,可以传入一个比较器(匿名内部类),并指定排序规则。(不能添加相同的元素)

(4)想要添加的元素,按照 字符串长度大小 来排序,就改变比较器规则,使用length()方法。(不能添加长度相同的元素)

2. TreeSet的去重机制

如果在创建TreeSet对象时,调用构造器,传入了一个Comparator匿名对象,就使用实现的compare()方法去重。如果方法返回0,就认为是相同的元素,就不添加。

如果创建TreeSet对象时,没有传入一个Comparator匿名对象,则以添加的String对象 底层实现的Compareable接口的compareTo()方法进行去重。

没有传入Comparator匿名对象,底层就会执行第一句代码,将添加的元素key本身 向上转型为 Comparable接口,然后通过第二句代码,调用String的compareTo()方法进行比较。(String字符串底层是实现了Comparable接口,所以才能进行转换)

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的教师的示例代码: ```java import java.util.Objects; public class Teacher implements Comparable<Teacher> { private String name; private int age; private double salary; public Teacher(String name, int age, double salary) { this.name = name; this.age = age; this.salary = salary; } public String getName() { return name; } public int getAge() { return age; } public double getSalary() { return salary; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Teacher teacher = (Teacher) o; return age == teacher.age && Double.compare(teacher.salary, salary) == 0 && Objects.equals(name, teacher.name); } @Override public int hashCode() { return Objects.hash(name, age, salary); } @Override public int compareTo(Teacher o) { if (this.equals(o)) { return 0; } int result = this.name.compareTo(o.getName()); if (result == 0) { result = Integer.compare(this.age, o.getAge()); } if (result == 0) { result = Double.compare(this.salary, o.getSalary()); } return result; } @Override public String toString() { return "Teacher{" + "name='" + name + '\'' + ", age=" + age + ", salary=" + salary + '}'; } } ``` 在这个示例中,教师Teacher实现了Comparable接口,重写了equals()、hashCode()和compareTo()方法。其中,equals()和hashCode()方法用于判断两个教师对象是否相等;compareTo()方法用于将教师对象按照姓名、年龄、工资的顺序比较大小,以便于TreeSet进行排序和去重。 下面是一个使用TreeSet保存教师信息的示例代码: ```java import java.util.TreeSet; public class TeacherTest { public static void main(String[] args) { TreeSet<Teacher> teacherSet = new TreeSet<>(); Teacher teacher1 = new Teacher("Tom", 35, 5000); Teacher teacher2 = new Teacher("Jerry", 30, 4000); Teacher teacher3 = new Teacher("Tom", 35, 5000); Teacher teacher4 = new Teacher("Lucy", 28, 4500); Teacher teacher5 = new Teacher("Jerry", 35, 5000); teacherSet.add(teacher1); teacherSet.add(teacher2); teacherSet.add(teacher3); teacherSet.add(teacher4); teacherSet.add(teacher5); for (Teacher teacher : teacherSet) { System.out.println(teacher); } } } ``` 在这个示例中,我们创建了一个TreeSet<Teacher>对象teacherSet,然后向其中添加了五个教师对象。由于teacher1和teacher3、teacher2和teacher5具有相同的姓名、年龄和工资,因此它们会被TreeSet自动去重。最后,我们使用for循环遍历teacherSet中的所有教师对象,并通过toString()方法输出它们的信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值