TreeSet排序方法
程序员文章站
2022-05-14 13:08:00
...
A: TreeSet集合的特点: 元素唯一,并且可以对元素进行排序
排序:
a: 自然排序
b: 使用比较器排序
到底使用的是哪一种的排序取决于,构造方法.
B:案例演示: TreeSet存储Integer类型的元素并遍历
存储下列元素: 20 , 18 , 23 , 22 , 17 , 24, 19 , 18 , 24
注意:使用TreeSet集合进行元素的自然排序,那么对元素有要求,要求这个元素
必须实现Comparable接口 否则无法进行自然排序
保证元素的唯一性是靠compareTo方法的返回值来确定如果返回0 表示两个元素相等
则不重复存储
public class MyTest {
public static void main(String[] args) {
TreeSet<Student> set = new TreeSet<>(new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
int num =o1.getAge() - o2.getAge();
//如果年龄一样不能说明是同一个对象
int num2 = num == 0 ? o1.getName().compareTo(o2.getName()) : num;
return num;
}
});
set.add(new Student("小萨", 29));
set.add(new Student("李商隐", 230));
set.add(new Student("小萨", 29));
set.add(new Student("李白", 232));
set.add(new Student("杜甫", 231));
System.out.println(set);
}
}
public class Student implements Comparable<Student> {
private String name;
private int age;
public Student() {
}
public Student(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 "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public int compareTo(Student s) {
int num = this.age - s.age;
//如果年龄一样不能说明是同一个对象
int num2 = num == 0 ? this.name.compareTo(s.name) : num;
return num;
}
}
结果为:[Student{name=‘小萨’, age=29}, Student{name=‘李商隐’, age=230}, Student{name=‘杜甫’, age=231}, Student{name=‘李白’, age=232}]
上一篇: 【java基础】TreeSet源码分析
下一篇: PHP上传多个图片并校验的代码