package java1;

import org.junit.Test;

import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;

/**
 * @author 冀帅
 * @date 2020/8/11-16:39
 */
public class TreeSetTest {
    /*
    * 1.向TreeSet中添加数据,要求是相同类的对象
    * 2.两种排序方式:自然排序(实现Comparable接口) 和 定制排序(Comparator接口)
    * 3.自然排序中,比较两个对象是否相同的标准为:compareTo()返回为0,不再是equals().
    *   ---treeSet不能放相同的数据
    * 4.定制排序中,比较两个对象是否相同的标准为:compare()返回为0,不再是equals().
              底层为红黑树
    * */
    @Test
    public void  test1(){
        TreeSet set = new TreeSet();
        //失败:不能添加不同类的对象
//        set.add(123);
//        set.add(456);
//        set.add("AA");
//        set.add(new User("Tom",12));


        //举例一:自动排序
//        set.add(34);
//        set.add(-34);
//        set.add(43);
//        set.add(11);
//        set.add(8);

        //举例二:对于自定义类要使用比较器
        set.add(new User("Tom",12));
        set.add(new User("Jerry",32));
        set.add(new User("Jim",2));
        set.add(new User("Mike",65));
        set.add(new User("Jack",33));
        set.add(new User("Jack",56));//添加不进去 因为你自己定义的比较是按照名字比较的
        //想进来要用二级排序
        Iterator iterator = set.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }
    @Test
    public  void test2(){
        Comparator com = new Comparator() {
            //按照年龄从小到大排列 ,年龄一样,不要
            @Override
            public int compare(Object o1, Object o2) {
                if (o1 instanceof User && o2 instanceof User){
                    User u1 = (User)o1;
                    User u2 = (User)o2;
                    return Integer.compare(u1.getAge(),u2.getAge());
                }else {
                    throw new  RuntimeException("输入数据类型不匹配");
                }
            }
        };
        TreeSet set = new TreeSet(com);//不加参数,按照自然排序来,加参数,按照参数的排序来

        set.add(new User("Tom",12));
        set.add(new User("Jerry",32));
        set.add(new User("Jim",2));
        set.add(new User("Mike",65));
        set.add(new User("Jack",33));
        set.add(new User("Jack",56));//添加不进去 因为你自己定义的比较是按照名字比较的
        //想进来要用二级排序
        Iterator iterator = set.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }
}