TreeSet使用元素的自然顺序对元素进行排序,或者根据创建set时提供的Comparator进行排序,具体取决于使用的构造方法。通俗一点来说,就是可以按照排序后的列表显示,也可以按照指定的规则排序。


Set<String> set = new TreeSet<String>();       

        set.add("f");  

        set.add("a");  

        set.add("b");  

        set.add("c");  

        set.add("d");  

        set.add("e");          

        System.out.println(set);

 

输出:[a, b, c, d, e, f] ,按照排序后输出


若想它倒序输出,可以指定一个规则让他倒序输出


public class TreeSetTest3 {  

     public static void main(String[] args) {  

        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);//降序排列  

    }  

}  

 

输出:e d c b a A


如果Set集合中放入的是我们自己定义的一个类类型呢?


注意:一定要定义一个排序规则类实现Comparator接口,与上面的方法类似


public class TreeSetTest2 {  

    public static void main(String[] args) {  

        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;  

    }      

 

输出:10 20 30 40


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



梅花香自古寒来