알고리즘 문제를 풀다 보면, List의 type을 내가 정의한 객체로 하고 싶을 때가 있다. 단순히, Integer 또는 String type
을 사용한다면 list.sort() 메소드
를 쓰면 되지만, 내가 정의한 객체 내부의 특정 필드를 기준으로 정렬하고 싶을 때는 다른 방법을 써야 한다.
compareTo
이용하기
Collections.sort()
를 구현할 때, 사용자가Comparable
인터페이스 내부의compareTo 메소드를 @Override
한다면, 가능하다.
🥕방법
class Music implements Comparable<Music>{
int index = 0;
int plays = 0;
Music(int idx, int play){
index = idx;
plays = play;
}
@Override
public int compareTo(Music music) {
if (music.plays < plays) {
return 1;
}
else if (music.plays > plays) {
return -1;
}
return 0;
}
}
ArrayList <Music> list = new ArrayList<>();
list.add(new Music(0, 500))
list.add(new Music(3, 800))
list.add(new Music(2, 1300))
Collections.sort(list) //오름차순으로 정렬
Collections.sort(list, Collections.reverseOrder()) //내림차순으로 정렬.
다음과 같이 구현하면 객체를 기준으로 List를 정렬할 수 있다. 자주 사용 될 수 있으므로 까먹지 말자!