treeset重写compareto
时间: 2023-04-25 19:03:23 浏览: 160
java 中HashMap、HashSet、TreeMap、TreeSet判断元素相同的几种方法比较
TreeSet是一个有序的集合,它可以根据元素的自然顺序或者指定的比较器进行排序。在使用TreeSet时,需要实现Comparable接口或者传入一个Comparator对象来指定排序规则。
如果要重写compareTo方法,需要注意以下几点:
1. compareTo方法的返回值应该是一个整数,表示当前对象与另一个对象的大小关系。如果当前对象小于另一个对象,返回负数;如果当前对象等于另一个对象,返回;如果当前对象大于另一个对象,返回正数。
2. compareTo方法应该与equals方法保持一致,即如果两个对象相等,它们的compareTo方法应该返回。
3. compareTo方法应该是可传递的,即如果a.compareTo(b)返回负数,b.compareTo(c)返回负数,那么a.compareTo(c)也应该返回负数。
4. compareTo方法应该是可反转的,即如果a.compareTo(b)返回正数,那么b.compareTo(a)应该返回负数。
下面是一个示例代码,演示如何重写compareTo方法:
```
public class Person implements Comparable<Person> {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
@Override
public int compareTo(Person o) {
if (this.age < o.age) {
return -1;
} else if (this.age > o.age) {
return 1;
} else {
return this.name.compareTo(o.name);
}
}
}
```
在这个示例中,我们定义了一个Person类,它有两个属性:name和age。我们希望按照年龄从小到大排序,如果年龄相同,则按照姓名的字典序排序。因此,我们在compareTo方法中先比较年龄,如果年龄不同,直接返回年龄的大小关系;如果年龄相同,再比较姓名的字典序。这样,我们就可以使用TreeSet来对Person对象进行排序了。
阅读全文