TreeSet_自然排序_定制排序

package com.zhou.java1;

import org.junit.jupiter.api.Test;

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

/**
 * @author upzhou
 * @create 2022-03-25 16:12
 */
public class TreeSetTest {

    /*
    1. 向 TreeSet 中添加的数据, 要求是相同类的对象

    2. 两种排序方式:自然排序(实现 Comparable 接口) 和 定制排序

    3. 自然排序中,比较两个对象是否相同的标准为: compareTo()返回 0, 不再是 equals()
    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));

        //举例 1:
//        set.add(34);
//        set.add(-34);
//        set.add(43);
//        set.add(11);
//        set.add(8);

        //举例 2:
        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));


        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();
        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());
        }
    }
}

 

posted @ 2022-04-30 14:33  UpZhou  阅读(17)  评论(0)    收藏  举报