比较器
TreeSet集合中元素可排序的方式:使用比较器的方式
结论:放到TreeSet或者TreeMap集合中的key部分的元素要想做到排序,有两种方法:
第一种:放到集合中的元素实现java.lang.Comparable接口
import java.util.Comparator;
import java.util.TreeSet;
public class TreeSetTest02 {
public static void main(String[] args) {
TreeSet<WuGui> wuGuis = new TreeSet<>();
wuGuis.add(new WuGui(100));
wuGuis.add(new WuGui(1000));
wuGuis.add(new WuGui(60));
for(WuGui a : wuGuis){
System.out.println(a);
}
}
}
class WuGui implements Comparable<WuGui>{
int age;
public WuGui(int age ){
this.age = age;
}
@Override
public String toString() {
return "WuGui{" +
"age=" + age +
'}';
}
@Override
public int compareTo(WuGui o) {
return this.age - o.age;
}
}
第二种:在构造TreeSet或者TreeMap集合中传递一个比较器Comparator
import java.util.Comparator;
import java.util.TreeSet;
public class TreeSetTest02 {
public static void main(String[] args) {
//创建TreeSet集合的时候,需要使用比较器
// TreeSet<WuGui> wuGuis = new TreeSet<>();//这样不行,没有通过构造方法传递一个比较器
// 通过构造方法传递一个比较器
// TreeSet<WuGui> wuGuis = new TreeSet<>(new WuGuiCompparator());
// 还可以使用匿名内部类的方式
TreeSet<WuGui> wuGuis = new TreeSet<>(new Comparator<WuGui>() {
@Override
public int compare(WuGui o1, WuGui o2) {
return -o1.age + o2.age;
}
});
wuGuis.add(new WuGui(100));
wuGuis.add(new WuGui(1000));
wuGuis.add(new WuGui(60));
for(WuGui a : wuGuis){
System.out.println(a);
}
}
}
class WuGui{
int age;
public WuGui(int age ){
this.age = age;
}
@Override
public String toString() {
return "WuGui{" +
"age=" + age +
'}';
}
}
// 单独编写一个比较器
// 比较器实现是java.util.Comparator下的 (Comparable 是java.lang包下的)
class WuGuiCompparator implements Comparator<WuGui>{
//指定规则
//按照年龄排序
@Override
public int compare(WuGui o1, WuGui o2) {
return -o1.age + o2.age;
}
}
- 对于Comparable 和 Comparator怎么选择?
当比较器规则不会发生改变的时候,或者说比较器规则单一,建议实现Comparable接口
如果比较器规则多个,并且需要多个比较器之间频繁切换,建议使用Comparator接口
Comparator接口符合OCP原则
标签:Java,age,public,new,WuGui,比较,wuGuis,TreeSet From: https://www.cnblogs.com/shijili/p/18009831