A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 编程小黑 中级黑马   /  2015-7-24 21:08  /  238 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

TreeSet的自然排序是根据元素的大小进行升序排序的,若想自己定制排序,比如降序排序,就可以使用Comparator接口了:
该接口包含int compare(Object o1,Object o2)方法,用于比较两个对象的大小,比较结果和compareTo方法一致;
要实现定制排序,需要在创建TreeSet集合对象时,提供一个一个Comparator对象,该对象里负责集合元素的排序逻辑;
TreeSet(Comparator comparator)

Eg:
package july7;
//定制排序的话,必须在创建TreeSet集合对象的时候提供一个Comparator方法

import java.util.Comparator;
import java.util.Set;
import java.util.TreeSet;

class Student1{
        private Integer age;
       
        public Student1(Integer age) {
                super();
                this.age = age;
        }

        public Integer getAge() {
                return age;
        }

        public void setAge(Integer age) {
                this.age = age;
        }

        @Override
        public String toString() {
                return age + "";
        }
}

class MyComparator implements Comparator{
       
        @Override
        public int compare(Object o1, Object o2) {
                if(o1 instanceof Student1 & o2 instanceof Student1){
                        Student1 s1 = (Student1)o1;
                        Student1 s2 = (Student1)o2;
                        if(s1.getAge() > s2.getAge()){
                                return -1;
                        }else if(s1.getAge() < s2.getAge()){
                                return 1;
                        }
                }
                return 0;
        }
}

public class Demo15 {
        public static void main(String[] args) {
                Set<Student1> s = new TreeSet(new MyComparator());
                /**
                 * 要实现定制排序,需要在创建TreeSet集合对象时,提供一个一个Comparator对象,
                 * 该对象里负责集合元素的排序逻辑;
                 */
                s.add(new Student1(140));
                s.add(new Student1(15));
                s.add(new Student1(11));
                s.add(new Student1(63));
                s.add(new Student1(96));
               
                System.out.println(s);
        }
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马