码迷,mamicode.com
首页 > 编程语言 > 详细

SortedSet自定义排序

时间:2015-04-04 10:40:04      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:自定义   set   集合   sortedset   

我们知道,集合Set可以存放一系列的对象,比如int,class,而且是无序的,是不可重复的。今天我们来探讨的是:Set可不可以排序,怎样自定义排序规则

首先盗一张图来说明Set的继承关系:

技术分享

我们今天主要讨论SortedSet的用法。
(注意:上图里都是借口,需要用它们的实现类)

下面我们来实现SortedSet的排序:

public class test {
    public static void main(String[] args) {
        TreeSet<String> set=new TreeSet<String>();
        set.add("B");
        set.add("D");
        set.add("A");
        set.add("E");
        set.add("C");
        System.out.println(set);
    }
}

结果是什么呢,是 [A, B, C, D, E] 。。。。
是按字母序排列的,那么如果我想让它倒叙排列呢,这里需要自定义一个排序规则。

//这时TreeSet的一个构造方法
//comparator:这个就是自定义的排序规则
public TreeSet(Comparator<? super E> comparator) {
        this(new TreeMap<>(comparator));
    }

下面我们来测试一下;

public class test {
    public static void main(String[] args) {
    //new 一个自定义Comparator
        TreeSet<String> set=new TreeSet<String>(new MyComparator());
        set.add("B");
        set.add("D");
        set.add("A");
        set.add("E");
        set.add("C");
        System.out.println(set);
    }
}

class MyComparator implements Comparator{
    @Override
    public int compare(Object o1, Object o2) {
        String s1=(String) o1;
        String s2=(String) o2;
        //反序
        return s2.compareTo(s1);
    }
}

结果和显然:[E, D, C, B, A]

这都是很简单的,如果我们用一个自定义class呢,比如一个Person类,要求按照age排序,我们来看一下如何实现:

public class test {
    public static void main(String[] args) {
    //自定义排序规则
        TreeSet<Person> set=new TreeSet<Person>(new MyComparator());
        set.add(new Person("A", 20));
        set.add(new Person("D", 10));
        set.add(new Person("E", 40));
        set.add(new Person("C", 50));
        set.add(new Person("B", 30));
        System.out.println(set);
    }
}

class Person{
    String name;
    int age;
    public Person(String name,int age){
        this.name=name;
        this.age=age;
    }
    @Override
    //重写toString方法,制定输出格式:
    public String toString() {
        return "name:"+name+",age="+age;
    }
}
class MyComparator implements Comparator{
    @Override
    public int compare(Object o1, Object o2) {
        Person p1=(Person) o1;
        Person p2=(Person) o2;
        //自定义比较规则
        return (int) (p1.age-p2.age);
    }
}

结果:
[name:D,age=10, name:A,age=20, name:B,age=30, name:E,age=40, name:C,age=50]

达到了我们想要的结果。

这样,我们就搞定了Set的排序。

SortedSet自定义排序

标签:自定义   set   集合   sortedset   

原文地址:http://blog.csdn.net/nsgsbs/article/details/44871303

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!