使用比较器comparator实现排序。此时TreeSet的构造方法为"TreeSet(Comparator comp)"。
当使用了比较器后,插入数据时将默认使用比较器比较元素。
比较器是一个实现了java.util.Comparator接口并重写了compare()方法的类,可以根据不同比较需求,创建不同的比较器。 例如创建一个根据age作为主排序属性,name作为次排序属性的比较器SortByAge,由于这个比较器是用来比较Student对象大小的,因此必须先转型为Student。
指定TreeSet的比较器为SortByAge,并插入一些Student对象:
public class TestTreeSet { public static void main(String[] args) { Set t = new TreeSet(new SortByAge()); t.add(new Student("Malongshuai1",23)); t.add(new Student("Malongshuai3",21)); t.add(new Student("Malongshuai2",23)); t.add(new Student("Malongshuai1",23)); //重复 t.add(new Student("Malongshuai1",22)); for (Iterator it = t.iterator();it.hasNext();) { Object obj = it.next(); System.out.println(obj); } } }当为TreeSet集合指定了比较器时,结果将先按照age顺序再按照name排序的,尽管Student类中仍然重写了compareTo()方法:
Malongshuai3 21 Malongshuai1 22 Malongshuai1 23 Malongshuai2 23