package com.javase.collection.set.treeset; import java.util.TreeSet; /** * TreeSet集合中的元素可排序的第二种方式:使用比较器的方式。 * * 结论:放到TreeSet或者TreeMap集合key部分的元素要想做到排序,包括两种方式: * 第一种:放到集合中的元素实现java.lang.Comparable接口。 * 第二种:在构造/创建TreeSet或者TreeMap集合的时候给它传一个比较器Comparator对象。 * (可以创建一个比较器对象类,也可以使用匿名内部类) * * Comparable和Comparator怎么选择呢? * 当比较规则不会发生改变的时候,或者说当比较规则只有一种的时候,建议实现Comparable接口。 * 如果比较规则较多,并且多个比较规则之间需要频繁切换,建议使用Comparator接口。 */ public class TreeSetText04 { public static void main(String[] args) { // TreeSet<WuGui> wuGuis = new TreeSet<>();//这样不行,没有通过构造方法传递一个比较器 // 创建集合 给构造方法传一个比较器 TreeSet<WuGui> wuGuis = new TreeSet<>(new WuGuiComparator()); // 也可以不写比较器类WuGuiComparator,使用匿名内部类直接new接口Comparator /* TreeSet<WuGui> w = new TreeSet<>(new Comparator<WuGui>() { @Override public int compare(WuGui o1, WuGui o2) { return o1.getAge() - o2.getAge(); } }); */ // 添加元素 wuGuis.add(new WuGui(999)); wuGuis.add(new WuGui(888)); wuGuis.add(new WuGui(11111)); wuGuis.add(new WuGui(666)); wuGuis.add(new WuGui(55555)); // 遍历集合 for (WuGui wuGui : wuGuis) { System.out.println(wuGui); } } } /* 输出结果: WuGui{age=666} WuGui{age=888} WuGui{age=999} WuGui{age=11111} WuGui{age=55555} */
package com.javase.collection.set.treeset; /** * 乌龟类 */ public class WuGui { private int age; public WuGui() { } public WuGui(int age) { this.age = age; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "WuGui{" + "age=" + age + '}'; } }
package com.javase.collection.set.treeset; import java.util.Comparator; /** * 乌龟比较器类 * 需要实现java.util.Comparator接口 */ public class WuGuiComparator implements Comparator<WuGui> { @Override public int compare(WuGui o1, WuGui o2) { return o1.getAge() - o2.getAge();//正序排列,反过来写就是倒序排列即return o2.getAge() - o1.getAge(); } }