
최솟값 또는 최대값을 빠르게 찾아내기 위해 완전이진트리 형태로 만들어진 자료구조
"자기 자신과 매개변수 객체를 비교"
public class ClassName implements Comparable<Type> {
    
    //code
    
    @Override
    public int compareTo(Type o) {
        // 비교 구구현
    }
}
public class User implements Comparable<User> {
    String name;
    int age;
    User(String name, int age) {
        this.name = name;
        this.age = age;
    }
    @Override
    public int compareTo(User o) {
        int result = this.name.compareTo(o.name);
        return result;
    }
}
public class User implements Comparable<User> {
    String name;
    int age;
    User(String name, int age) {
        this.name = name;
        this.age = age;
    }
    @Override
    public int compareTo(User o) {
        if(this.age > o.age) {
            return 1;
        } else if(this.age == o.age) {
            return 0;
        } else {
            return -1;
        }
    }
}
public class User implements Comparable<User> {
    String name;
    int age;
    User(String name, int age) {
        this.name = name;
        this.age = age;
    }
    @Override
    public int compareTo(User o) {
        int result = this.name.compareTo(o.name);
        if(result == 0) {
            res = this.age - o.age;
        }
        
        return result;
    }
}
"두 매개변수 객체를 비교"
import java.util.Comparator;
import java.util.PriorityQueue;
// 클래스에서 사용할 때
public static class ClassName implements Comparator<Type> {
    @Override
    public int compare(Type o1, Type o2) {
        return o1 - o2;
    }
}
// Priority Queue에서 사용할 때
PriorityQueue<Integer> queue = new PriorityQueue<Integer>(new Comparator<Integer>() {
    @Override
    public int compare(Integer o1, Integer o2) {
        return o1 - o2;
    }
});
import java.util.Comparator;
import java.util.PriorityQueue;
// Priority Queue에서 사용할 때
PriorityQueue<User> queue = new PriorityQueue<User>(new Comparator<User>() {
    @Override
    public int compare(User o1, User o2) {
        return o1.name - o2.name? 1 : -1;
    }
});
import java.util.Comparator;
import java.util.PriorityQueue;
// Priority Queue에서 사용할 때
PriorityQueue<User> queue = new PriorityQueue<User>(new Comparator<User>() {
    @Override
    public int compare(User o1, User o2) {
        return o1.age - o2.age? 1 : -1;
    }
});
import java.util.Comparator;
import java.util.PriorityQueue;
// Priority Queue에서 사용할 때
PriorityQueue<User> queue = new PriorityQueue<User>(new Comparator<User>() {
    @Override
    public int compare(User o1, User o2) {
        int result = o1.name - o2.name;
        if(result == 0) {
            result = o1.age - o2.age;
        }
        return result;
    }
});
직접 만든 클래스의 비교 기준을 만들고 싶다면 Comparable을 implements해서 사용Integer, String, Character 등의 비교 기준을 바꾸려면 Comparator을 써서 확장을 해주기참고