javatreeset如何定义排序
时间: 2023-07-20 07:43:51 浏览: 87
Java中的TreeSet可以通过实现Comparable接口或者传递一个Comparator对象来定义排序规则。
1. 实现Comparable接口
实现Comparable接口的类可以使用compareTo()方法来定义元素之间的比较规则。当创建TreeSet时,它会自动使用该方法进行排序。例如,以下代码实现了一个Person类,通过实现Comparable接口来定义按照年龄从小到大的排序规则:
```java
public class Person implements Comparable<Person> {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public int compareTo(Person p) {
return this.age - p.age;
}
// getters and setters
}
```
然后可以创建一个TreeSet来存储Person对象,它会根据年龄从小到大进行排序:
```java
TreeSet<Person> persons = new TreeSet<>();
persons.add(new Person("Tom", 30));
persons.add(new Person("Jerry", 20));
persons.add(new Person("Alice", 25));
```
2. 传递一个Comparator对象
如果一个类没有实现Comparable接口,或者希望按照不同的规则进行排序,可以通过传递一个Comparator对象来定义排序规则。Comparator对象中需要实现compare()方法来定义元素之间的比较规则。例如,以下代码实现了一个PersonComparator类,通过传递该类的实例来定义按照姓名从小到大的排序规则:
```java
public class PersonComparator implements Comparator<Person> {
@Override
public int compare(Person p1, Person p2) {
return p1.getName().compareTo(p2.getName());
}
}
// 创建TreeSet时传递PersonComparator对象
TreeSet<Person> persons = new TreeSet<>(new PersonComparator());
persons.add(new Person("Tom", 30));
persons.add(new Person("Jerry", 20));
persons.add(new Person("Alice", 25));
```
这样创建的TreeSet会根据姓名从小到大进行排序。
阅读全文