import java.util.Comparator;
import java.util.TreeSet;
/*
放到TreeSet或者TreeMap集合key部分的元素要进行排序,有两种方式:
第一种:放在集合中的元素实现Comparable接口
第二种:在构造TreeSet或者TreeMap集合的时候传一个比较器对象
Comparable接口适合比较规则不发生改变只有1个;Comparator适合比较规则频繁切换有许多个
后者的设计符合OCP原则
其中:
Comparable接口,实现k.compareTo(t.key)方法
Comparator接口,实现compare(t.key1, t.key2)方法
*/
public class CompareComparator {
public static void main(String[] args) {
// 创建TreeSet集合的时候,需要给构造方法传递一个比较器,才可以使用比较器
TreeSet<Animal> animals = new TreeSet<>(new AnimalComparator());
// new出对象后放进animals集合中
animals.add(new Animal(1000));
animals.add(new Animal(200));
animals.add(new Animal(1200));
for (Animal animal : animals) {
System.out.println(animal);
}
}
}
class Animal {
int age;
public Animal(int age) {
this.age = age;
}
@Override
public String toString() {
return "小乌龟[age=" + age + "]";
}
}
// 编写比较器,实现Comparator借口
class AnimalComparator implements Comparator<Animal> {
// 指定比较规则
@Override
public int compare(Animal o1, Animal o2) {
return o1.age - o2.age;
}
}
/*不使用比较器,可以使用匿名内部类的方式:类没有名字,直接new接口
11行改为:
TreeSet<Animal> animals = new TreeSet<>(new Comparator<Animal>() {
@Override
public int compare(Animal o1, Animal o2)
return o1.age - o2.age;
});
其中,不写38-45行的代码,加一个的泛型<Animal>,加{}表示实现
*/
javase:comparator接口
最新推荐文章于 2024-08-29 18:44:48 发布