TreeSet: 底层数据结构是二叉数,元素唯一,且能对元素进行排序
自然排序:采用空参构造,用的就是自然排序,自然排序,对元素有要求,要求元素必须实现一个 Comparable 接口
重写 接口中的 compareTo方法,根据此方法返回值的 正 负 0 来确定元素放置的位置
TreeSet(Comparator < ? super E > comparator)
构造一个新的空 TreeSet,它根据指定比较器进行排序。
比较器排序:采用有参构造,这个构造方法需要一个比较器 Comparator 接口 需要传入这个接口的子类对象,并且重写接口中 compare(T o1, T o2) 这个排序的方法,根据此方法返回值的正负0 来确定元素的放置的位置。
MyComparator myComparator = new MyComparator();
TreeSet<Integer> treeSet = new TreeSet<>(myComparator);使用匿名内部类,作为参数传递,比较方便
package com.xawl.demo;
import java.util.Comparator;
import java.util.TreeSet;
/**
* @Author:liger
* @Description:爱学Java
*/
public class Test2 {
public static void main(String[] args) {
TreeSet<Student> students = new TreeSet<>(new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
int num=o1.getAge()-o2.getAge();
int nums1=num==0?o1.getName().length()-o2.getName().length():num;
int nums2=nums1==0?o1.getName().compareTo(o2.getName()):nums1;
return nums2;
}
});
students.add(new Student("张三",20));
students.add(new Student("张三22",20));
students.add(new Student("张三333",30));
students.add(new Student("张三4444",40));
students.add(new Student("张三55555",50));
students.add(new Student("张三666666",60));
students.add(new Student("张三7777777",70));
students.add(new Student("张三22",80));
students.add(new Student("张三",20));
students.add(new Student("张三333",70));
students.add(new Student("张三22",80));
for (Student student : students) {
System.out.println(student);
}
}
}