Day09_45_Set集合_SortedSet02

SortedSet

 * TreeSet是SortedSet接口的实现类,TreeSet底层是一个TreeMap,相当于TreeMap中的key。

 * SortedSet集合是如何实现自动排序的呢?

    - TreeSet集合在添加元素的时候会调用已添加元素(类)的 compareTo()方法 (U1.compareTo(U2))方法底层是一个do..while()循环。

    - 如果将compareTo()方法固定返回0 (return 0),那么就会出现只能添加一个数据的结果,因为这样的话表示后面的元素和第一个元素是相等的,而TreeSet集合是不能重复的。
 
    - 所有可以排序的类,都实现了java.lang.Comparable接口。

    -  Comparable接口中只有一个方法: int conpareTo(T o)

           返回 0,   表示this == obj

           返回正数,表示this > obj

           返回负数,表示this < obj

    - 自己写的类需要实现Comparable接口,然后重写compareTo()方法,才能实现自动排序
  • 代码

            package com.shige.Collection.Set.SortedSet;
    
            import java.util.Iterator;
            import java.util.SortedSet;
            import java.util.TreeSet;
    
            public class SortedSetTest02 {
                public static void main(String[] args) {
    
                    // 创建集合
                    SortedSet users= new TreeSet();//父类引用指向子类对象
    
                    //创建用户的对象
                    User user1=new User(88,"CBA");
                    User user2=new User(23,"BAC");
                    User user3=new User(43,"ABC");
    
                    //添加元素
                    users.add(user1);
                    users.add(user2);
                    users.add(user3);
    
                    // 遍历输出集合中的元素
                    Iterator iterator=users.iterator();
                    while(iterator.hasNext()){
                        Object user=iterator.next();
                        System.out.println(user); // 按照年龄从小到大排序输出
                    }
    
                }
    
            }
    
            // 用户类
            class User implements Comparable{  //实现一个接口,就要重写接口中的所有方法
                int age;
                String name;
    
                User(int age,String name){
                    this.age=age;
                    this.name=name;
                }
    
                public String toString(){
                    return "User[age: "+age+"name: "+name+"]";
                }
    
                 // 重写Comparable接口中的compareTo方法
                @Override
                public int compareTo(Object o) {
                    
                    // 用年龄age 比较
                    /*
                    int age1=this.age;
                    int age2=((User)o).age; //将O 转换为 User
                    return age1-age2;
    
                    */
                    
                    //用name字段进行排序,因为String本身就实现了compareTo()方法,所以直接调用即可
                    return this.name.compareTo(((User)o).name);
    
    
                }
            }
    
posted @ 2021-04-03 15:05  失昼  阅读(45)  评论(0)    收藏  举报