Set集合排序

绿林寻猫
2021-12-08 / 0 评论 / 130 阅读 / 正在检测是否收录...

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

 

 

 

0

评论 (0)

取消