TreeSet

import lombok.*;
import org.junit.jupiter.api.Test;

import java.util.*;

/*
Comparable是对象自身的比较方式,而Comparator是外部定义的比较方式。
* */
public class T {

    //Comparator外部比较器 User实体可以和Comparator解耦
    @Test
    public void comparatorTest() {
        TreeSet<User> treeSet = new TreeSet<>(new Comparator<User>() {
            @Override
            public int compare(User o1, User o2) {
                if (o1.id == o2.id) {
                    //name升序
                    return o1.name.compareTo(o2.name);
                }
                return o2.id - o1.id;//id降序
            }
        });
        treeSet.add(User.builder().id(2).name("xixi").build());
        treeSet.add(User.builder().id(5).name("haha").build());
        treeSet.add(User.builder().id(8).name("xz").build());
        treeSet.add(User.builder().id(2).name("hello").build());

        treeSet.forEach(System.out::println);
    }

    @Test
    public void comparableTest() {
        TreeSet<User2> treeSet = new TreeSet<>();
        treeSet.add(new User2(2));
        treeSet.add(new User2(1));
        treeSet.add(new User2(5));
        treeSet.add(new User2(3));

        treeSet.forEach(System.out::println);
    }

}

@Builder
@Data
class User {
    int id;
    String name;
}

/*
Comparable 内部比较器
* */
@AllArgsConstructor
@Data
class User2 implements Comparable<User2> {
    int id;

    @Override
    public int compareTo(User2 o) {
        return this.id - o.id;
    }
}
posted @ 2024-08-17 16:51  干饭达人GoodLucy  阅读(8)  评论(0编辑  收藏  举报