Java集合框架(Collections Framework)(8)

使用比较器comparator实现排序。此时TreeSet的构造方法为"TreeSet(Comparator comp)"。
当使用了比较器后,插入数据时将默认使用比较器比较元素。
比较器是一个实现了java.util.Comparator接口并重写了compare()方法的类,可以根据不同比较需求,创建不同的比较器。 例如创建一个根据age作为主排序属性,name作为次排序属性的比较器SortByAge,由于这个比较器是用来比较Student对象大小的,因此必须先转型为Student。

import java.util.*; // public class SortByAge implements Comparator { public int compare(Object o1,Object o2) { //Cast to Student first if (!(o1 instanceof Student) || !(o2 instanceof Student)) { throw new ClassCastException("Wrong"); } Student s1 = (Student)o1; Student s2 = (Student)o2; //compare age first, then name int temp = s1.age - s2.age; return temp == 0 ? s1.name.compareTo(s2.name) : temp; } }

指定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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/349b058e608364c69d6a7c8d05332c22.html