特点:元素唯一,且可对元素进行排序;自然排序、比较器排序;
使用TreeSet集合进行元素的自然排序,那么对元素有要求,要求这个元素必须实现Comparable接口,否则无法进行自然排序。
自然排序:
/**
* 自然排序
*/
public class Dog implements Comparable<Dog>{
private String name;
private Integer age;
public Dog(String name, Integer age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Dog{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public int compareTo(Dog dog) {
// 首先比较name长度
int num1 = this.name.length() - dog.name.length();
// 其次比较name的字典顺序,String类的compareTo()方法
int num2 = num1 == 0 ? this.name.compareTo(dog.name) : num1;
// 最后比较年龄大小
int num3 = num2 == 0 ? this.age - dog.age : num2;
return num3;
}
}
/**
* 自然排序
*/
@Test
public void test1(){
TreeSet<Dog> dogSet = new TreeSet<>();
dogSet.add(new Dog("dahuang",2));
dogSet.add(new Dog("alfa",1));
dogSet.add(new Dog("langgou",3));
System.out.println(dogSet);
}
输出结果:
[Dog{name='alfa', age=1}, Dog{name='dahuang', age=2}, Dog{name='langgou', age=3}]
比较器排序:
public class Person {
private String name;
private Integer age;
public Person(String name, Integer age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
/**
* 比较器排序
*/
@Test
public void test2(){
TreeSet<Person> personTreeSet = new TreeSet<>(new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
// 首先比较name长度
int num1 = o1.getName().length() - o2.getName().length();
// 其次比较name的字典顺序,String类的compareTo()方法
int num2 = num1 == 0 ? o1.getName().compareTo(o2.getName()) : num1;
// 最后比较年龄大小
int num3 = num2 == 0 ? o1.getAge() - o2.getAge() : num2;
return num3;
}
});
personTreeSet.add(new Person("lili",12));
personTreeSet.add(new Person("ali",10));
personTreeSet.add(new Person("ali",9));
personTreeSet.add(new Person("bli",13));
System.out.println(personTreeSet);
}
输出结果:
[Person{name='ali', age=9}, Person{name='ali', age=10}, Person{name='bli', age=13}, Person{name='lili', age=12}]
本文详细解析了Java中TreeSet集合的使用,包括如何通过实现Comparable接口进行自然排序,以及如何使用Comparator接口进行自定义排序。通过具体示例展示了不同排序方式的应用场景。
555

被折叠的 条评论
为什么被折叠?



