java
Comparable, Comparator 에 관하여
키위먹고싶다
2021. 12. 12. 03:47
- Comparable
- java.lang package에 있는 인터페이스이다.
- 객체의 정렬기준을 정해줄 때 사용한다.
- Comparable 인터페이스의 구현체는 compareTo메서드를 구현해야 한다.
- 자기 자신의 변수와 compareTo(Object o)로 넘어온 객체의 변수를 비교한다.
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
class CompareTest {
public static void main(String[] args) {
List<Person> list = new ArrayList<>();
list.add(new Person("원숭이", 15, 60));
list.add(new Person("토끼", 22, 44));
list.add(new Person("코끼리", 34, 58));
list.add(new Person("사자", 85, 85));
list.add(new Person("굼뱅이", 7, 2));
System.out.println(list);
Collections.sort(list);
System.out.println(list);
}
}
class Person implements Comparable<Person>{
String name;
int age;
int speed;
Person(String name, int age, int speed){
this.name = name;
this.age = age;
this.speed = speed;
}
public String toString(){
return "[" + name + "," + age + "," + speed + "]";
}
@Override
public int compareTo(Person o) {
return o.age - this.age; //나이 기준으로 내림차순
}
}
- Comparator
- java.util package에 있는 인터페이스이다.
- 이미 정해진 정렬기준 외 다른 정렬기준을 사용하고 싶을때 사용한다.
- Comparator 인터페이스의 구현체는 compare메서드를 구현해야 한다.
- Comparator 인터페이스의 구현체는 그 클래스 자체가 정렬기준이다.(외부정렬)
- 만약 Comparable을 구현한 클래스의 정렬기준 외에 다른 정렬기준이 필요하다면 Comparator를 구현한 클래스를 정렬 기준으로 사용한다.
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
class CompareTest {
public static void main(String[] args) {
List<Person> list = new ArrayList<>();
list.add(new Person("원숭이", 15, 60));
list.add(new Person("토끼", 22, 44));
list.add(new Person("코끼리", 34, 58));
list.add(new Person("사자", 85, 99));
list.add(new Person("굼뱅이", 7, 2));
System.out.println(list);
Collections.sort(list);
System.out.println(list);
Collections.sort(list, new SpeedUp());
System.out.println(list);
}
}
class SpeedUp implements Comparator<Person>{
@Override
public int compare(Person o1, Person o2) {
return o1.speed - o2.speed; //스피드 기준으로 오름차순
}
}
class Person implements Comparable<Person>{
String name;
int age;
int speed;
Person(String name, int age, int speed){
this.name = name;
this.age = age;
this.speed = speed;
}
public String toString(){
return "[" + name + "," + age + "," + speed + "]";
}
@Override
public int compareTo(Person o) {
return o.age - this.age; //나이 기준으로 내림차순
}
}