TreeSet的第二种排序方式:比较器

来源:互联网 发布:黑暗之光魔翼升阶数据 编辑:程序博客网 时间:2024/06/05 17:16
/*TreeSet的第二种排序方式:当元素自身不具备比较性时,或者具备的比较性不是所需要的这时就需要让集合自身具备比较性。在集合初始化时,就有了比较方式。定义了比较器,将比较器对象作为参数传递给TreeSet集合的构造函数。TreeSet(Comparator<? super E> comparator)           构造一个新的空 TreeSet,它根据指定比较器进行排序。当两种排序都存在时,以比较器为主。如何实现比较器:定义一个类,实现Comparator接口,覆盖compare方法*/import java.util.*;class  SetDemo2{public static void main(String[] args) {//指定比较器TreeSet ts = new TreeSet(new MyCompare());ts.add(new Student("sh3",23));ts.add(new Student("sh4",24));ts.add(new Student("hh1",21));ts.add(new Student("dh2",22));ts.add(new Student("ah5",22));Iterator it = ts.iterator();while(it.hasNext()){Student sd = (Student)it.next();System.out.println("name:"+sd.getName()+" age:"+sd.getAge());}}}//自定义的比较器,按姓名排序class MyCompare implements Comparator{public int compare(Object o1,Object o2){Student s1 = (Student)o1;Student s2 = (Student)o2;return s1.getName().compareTo(s2.getName());}}class Student implements Comparable{private String name;private int age;Student(String name,int age){this.name = name;this.age = age;}public String getName(){return name;}public int getAge(){return age;}//自动调用public int compareTo(Object obj){if(!(obj instanceof Student)){throw new RuntimeException("对象转换不成功!");}Student s = (Student)obj;if(this.age>s.age)return 1;else if(this.age == s.age){//如果年龄相同,则再比较姓名return this.name.compareTo(s.name);}elsereturn -1;}}

0 0