1. 程式人生 > >Set集合排序

Set集合排序

TreeSet

TreeSet中儲存的型別必須是一致的,不能一下存int,一下又存string
當向TreeSet中新增自定義物件時,有2種排序方法,1:自然排序  2、定製排序
        自然排序:要求自定義類實現java.lang.Comparable介面並重寫compareTo(Object obj)方法。在此方法中,指明按照自定義類的哪個屬性進行排序

1.自然排序

    @Test
    public void t1(){
        Set<String> s = new TreeSet<String>();
        s.add("d");
        s.add("a");
        s.add("e");
        s.add("c");
        s.add("b");
        System.out.println(s);
    }

輸出結果:

2.倒序

若想它倒序輸出,可以指定一個規則讓他倒序輸出

    @Test
    public void t2(){
        Set<String> set = new TreeSet<String>(new MyComparator());
        set.add("a");
        set.add("b");
        set.add("c");
        set.add("d");
        set.add("e");
        set.add("A");
        for(Iterator<String> iterator = set.iterator(); iterator.hasNext();){
            System.out.print(iterator.next()+" ");
        }
    }
    class MyComparator implements Comparator<String> {
        @Override
        public int compare(String o1, String o2) {
            return o2.compareTo(o1);//降序排列
        }
    }

輸出結果:

 

如果Set集合中放入的是我們自己定義的一個類型別呢?

注意:一定要定義一個排序規則類實現Comparator介面,與上面的方法類似

@Test
    public void t3(){
        Set<Person> set = new TreeSet<Person>(new PersonComparator());
        Person p1 =  new Person(10);
        Person p2 =  new Person(20);
        Person p3 =  new Person(30);
        Person p4 =  new Person(40);
        set.add(p1);
        set.add(p2);
        set.add(p3);
        set.add(p4);
        for(Iterator<Person> iterator = set.iterator();iterator.hasNext();){
            System.out.print(iterator.next().score+" ");
        }
    }

    
    class Person{
        int score;
        public Person(int score){
            this.score = score;
        }
        public String toString(){
            return String.valueOf(this.score);
        }
    }
    class PersonComparator implements Comparator<Person>{
        @Override
        public int compare(Person o1, Person o2) {
            return o1.score - o2.score;
        }
    }

如果按分數倒序排列,只需要更改compare方法中的o2.score-o1.score