TreeSet——>底层是TreeMap 二叉树
    有序 无重复

    1.java.util包
    2.创建对象
    无参数构造方法
    带(Collection<? extends E> c)参数构造方法
    3.常用方法
    add(E e); iterator(); remove(E e); size();

    没有修改方法
    4.无重复的原则
    TreeSet集合按照字母的自然顺序排列(UniCode编码)
    由此联想到 compareTo方法

    但是我们写的Person类没有 compareTo方法
    所以要想把自己写的类存入TreeSet集合里 我们必须重写 compareTo方法
    而compareTo方法是属于Comparable接口 那么实现了Comparable接口就必须重写compareTo方法
    如果不重写 编译时没事 运行时会出现异常 ClassCastException

    1. public class Person implements Comparable<Person>{
    2. private String name;
    3. private int age;
    4. private int num;//编号 记录是第几个进来的
    5. public Person(String name,int age,int num){
    6. this.name = name;
    7. this.age = age;
    8. this.num = num;//编号 记录是第几个进来的
    9. }
    10. public int getNum(){
    11. return this.num;
    12. }
    13. //重写toString方法 让对象打印输出时输出的是对象的属性 而不是一串hashCode码
    14. public String toString(){
    15. StringBuilder stringBuilder = new StringBuilder();
    16. stringBuilder.append("{");
    17. stringBuilder.append(this.name);
    18. stringBuilder.append(",");
    19. stringBuilder.append(this.age);
    20. stringBuilder.append(",");
    21. stringBuilder.append(this.num);
    22. stringBuilder.append("}");
    23. return new String(stringBuilder);
    24. //StringBuilder 变为 String的方法有两个
    25. //另一个是 stringBuilder.toString();
    26. }
    27. //如果想要person对象存入TreeSet集合里 必须实现Comparable接口 重写compareTo方法
    28. public int compareTo(Person o) {
    29. //compareTo方法正数排前面 负数排后面 一样的话返回0
    30. int value = this.name.compareTo(o.name);
    31. //名字如果一样 返回值是0
    32. if(value!=0){//名字不一样的话
    33. return value;
    34. }
    35. return this.age-o.age;//如果名字一样 再返回年龄比 表示的是年龄大的话就排后面
    36. }
    37. }

    主方法:

    1. public static void main(String[] args) {
    2. TreeSet<String> stringSet = new TreeSet<String>();
    3. stringSet.add("小明");
    4. stringSet.add("小明");
    5. stringSet.add("小明");
    6. stringSet.add("小明");
    7. stringSet.add("小明");
    8. System.out.println(stringSet.size());
    9. TreeSet<Person> personSet = new TreeSet<Person>();
    10. personSet.add(new Person("小明",25,5));
    11. personSet.add(new Person("小明",18,1));
    12. personSet.add(new Person("小明",16,2));
    13. personSet.add(new Person("小明",20,3));
    14. personSet.add(new Person("小明",22,4));
    15. System.out.println(personSet.size());
    16. System.out.println(personSet);
    17. //重写compareTo方法后
    18. // 输出 [{小明,16,2}, {小明,18,1}, {小明,20,3}, {小明,22,4}, {小明,25,5}]
    19. }