TreeSet 是可排序的集合
要实现该集合必须要在类里或者集合构造器中传入 实现比较器接口的方法,否则会报错
一共有两种 :Comparable 和 Comparator
Comparator
在TreeSet的有参构造器中传入自定义的Comparator 实现方法;
import java.util.Comparator;
public class Mycompaarator implements Comparator<Student> {
@Override
public int compare(Student a, Student b) {
int num = a.id - b.id;
int num2 = num == 0 ? a.getName().length()-b.getName().length():num;
int num3 = num2 ==0 ? a.getAge()-b.getAge():num2;
return num3;
}
}
public class Demo2{
public static void main(String[] args) {
TreeSet<Student>set = new TreeSet<Student>(new Mycompaarator());
Student s1 = new Student(10,"zdj",1);
Student s2 = new Student(10,"zfefj",5);
Student s3 = new Student(10,"zdjj",1);
Student s4 = new Student(10,"zdyj",7);
Student s5 = new Student(10,"zdjj",4);
Student s6 = new Student(10,"zdfj",3);
set.add(s1);
set.add(s2);
set.add(s3);
set.add(s4);
set.add(s5);
set.add(s6);
for(Student s : set) System.out.println(s);
}
Comparable
让类继承Comparable ,在类中重写sort方法,只有一个形参,但是与类绑定,只能选一种sort手段,
但是在TreeSet 实例化的时候不用利用构造传参,
package com.company;
import java.util.Comparator;
import java.util.HashSet;
import java.util.TreeSet;
class Student implements Comparable<Student> {
int age;
String name;
int id;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Student(int age, String name, int id) {
this.age = age;
this.name = name;
this.id = id;
}
public Student(){}
@Override
public String toString() {
return "Student{" +
"age=" + age +
", name='" + name + '\'' +
", id=" + id +
'}';
}
@Override
public int compareTo(Student o) {
int num = this.id - o.id;
int num1 = num == 0 ? this.name.length()-o.name.length():num;
int num2 = num1 == 0 ? this.name.compareTo(o.name):num1;
return num2;
}
}
public class Demo2{
public static void main(String[] args) {
TreeSet<Student>set = new TreeSet<Student>();
Student s1 = new Student(10,"zdj",1);
Student s2 = new Student(10,"zfefj",5);
Student s3 = new Student(10,"zdjj",1);
Student s4 = new Student(10,"zdyj",7);
Student s5 = new Student(10,"zdjj",4);
Student s6 = new Student(10,"zdfj",3);
set.add(s1);
set.add(s2);
set.add(s3);
set.add(s4);
set.add(s5);
set.add(s6);
for(Student s : set) System.out.println(s);
}
}