一:TreeSet基于TreeMap的实现,使用元素的自然排序对元素进行排序,或者创建Set时提供的Comparator进行排序,取决于使用的构造方法。
案例:创建学生类。,添加学生对象并进行比较
package Domain;
public class Student2 {
private String name;
private int 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;
}
public Student2(String name,int age) {
this.name=name;
this.age=age;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
}
package cn.map;
import java.util.Comparator;
import java.util.TreeSet;
import Domain.Student2;
public class TreeSetDemo2 {
public static void main(String[] args) {
TreeSet<Student2> set=new TreeSet<Student2>(new Comparator<Student2>() {
//如果一个方法的参数时接口,那么真正要的是接口的实现类的对象
//而匿名内部类可以实现这个东西
//按照姓名长度比较
@Override
public int compare(Student2 o1, Student2 o2) {
//姓名长度
int num1=o1.getName().length()-o2.getName().length();
//姓名内容
int num2=num1==0?o1.getName().compareTo(o2.getName()):num1;
//年龄
int num3=num2==0?o1.getAge()-o2.getAge():num2;
return num3;
}
});
Student2 s1 = new Student2("linqingxia", 27);
Student2 s2 = new Student2("zhangguorong", 29);
Student2 s3 = new Student2("wanglihong", 23);
Student2 s4 = new Student2("linqingxia", 27);
Student2 s5 = new Student2("liushishi", 22);
Student2 s6 = new Student2("wuqilong", 40);
Student2 s7 = new Student2("fengqingy", 22);
set.add(s1);
set.add(s2);
set.add(s3);
set.add(s4);
set.add(s5);
set.add(s6);
set.add(s7);
for (Student2 student : set) {
System.out.println(student);
}
}
}
结果:
如果一个方法的参数时接口,那么真正要的是接口的实现类的对象,而匿名内部类可以实现这个东西
如果要对多个类去实现比较,可以去创建类去实现这个接口,使用一次就可以使用内部类去创建。
总结:排序:
1:自然排序:让元素所属的类实现自然排序接口Comparable
2:比较器排序:比如这里就是让集合的构造方法结构一个比较器接口的子类对象Comparator