package demo.assemble;
import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;
class Teacher implements Comparable<Teacher> {
private String name = "hh";
private int age = 18;
Teacher() {
}
Teacher(String name, int age) {
this.name = name;
this.age = age;
}
String getName() {
return name;
}
void setName(String name) {
this.name = name;
}
int getAge() {
return age;
}
@Override
public int compareTo(Teacher t) {
//如果年龄不同,return this.age - t.age,如果年龄相同,就比较name
return (this.age == t.age ? this.name.compareTo(t.name) : this.age - t.age);
}//若想反序,将this t 互换
@Override
public String toString() {
return name + " " + age;
}
}
class 集合框架_TreeSet {
public static void main(String[] args) {//Set 不同步
TreeSet<Teacher> ts = new TreeSet<Teacher>(new CompareToByName());//按自然顺序排序 根据的是compareTo方法,来保证唯一,维持排序
ts.add(new Teacher("a", 3));
ts.add(new Teacher("b", 3));
ts.add(new Teacher("c", 2));
ts.add(new Teacher("c", 1));//保留
ts.add(new Teacher("a", 3));//剔除
Iterator it = ts.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
}
}
//方法二:比较器
class CompareToByName implements Comparator<Teacher> {
@Override
public int compare(Teacher t1, Teacher t2) {
//如果名字不同,return t1.getName().compareTo(t2.getName()),如果年龄相同,就比较age
return (t1.getName().compareTo(t2.getName()) == 0 ? t1.getAge() - t2.getAge() : t1.getName().compareTo(t2.getName()));
// return 1;//队列 //若还想要保证无重复元素,加一个判断:当全部属性相同时,返回0
// return -1;//栈
}
}
/*
* TreeSet对元素进行排序的方式一:
让元素自身具备比较功能,就需要实现Comparable接口。覆盖compareTo方法。
如果不要按照对象中具备的自然顺序进行排序。如果对象中不具备自然顺序。怎么办?
可以使用TreeSet集合第二种排序方式二:
让集合自身具备比较功能,定义一个类实现Comparator接口,覆盖compare方法。
将该类对象作为参数传递给TreeSet集合的构造函数。
方式一二同时存在,优先使用方式二
* */
集合框架_TreeSet的常用方法和比较器
最新推荐文章于 2022-08-04 11:43:11 发布