TreeSet

干饭达人GoodLucy發表於2024-08-17
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;
    }
}

相關文章