최솟값 또는 최대값을 빠르게 찾아내기 위해 완전이진트리 형태로 만들어진 자료구조
"자기 자신과 매개변수 객체를 비교"
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을 써서 확장을 해주기참고