정렬과 관련된 interface는 Comparable, Comparator 이렇게 두 가지가 있다.
public class ListSortTest {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("일지매");
list.add("홍길동");
list.add("성춘향");
list.add("변학도");
list.add("이순신");
System.out.println("정렬 전 : " + list);
//정렬 전 : [일지매, 홍길동, 성춘향, 변학도, 이순신]
}
}
형식1) Collections.sort(리스트);
=⇒ 내부 정렬 기준이 구현되어 있는 데이터 일 경우에 사용 가능
public static void main(String[] args) {
Collections.sort(list); //default 오름차순
System.out.println("정렬 후 : " + list);
//정렬 후 : [변학도, 성춘향, 이순신, 일지매, 홍길동]
Collections.shuffle(list); //데이터 섞기
System.out.println("자료 섞기 후 : " + list);
//자료 섞기 후 : [일지매, 이순신, 변학도, 성춘향, 홍길동]
}
형식2) Collections.sort(리스트, 외부 정렬 기준 객체의 인스턴스);
=⇒ 외부 정렬 기준에 맞게 정렬한다.
ex) 오름차순일 경우 =⇒ 앞의 값이 크면 양수, 같으면 0, 앞의 값이 작으면 음수를 반환하도록 구현하면 된다.
public static void main(String[] args) {
// 외부 정렬 기준을 지정해서 정렬하기
//Desc dd = new Desc();
//Collections.sort(list, dd);
Collections.sort(list, new Desc());
// 객체 생성해도 다른 곳에 쓸 일이 없으므로 현재식이 효율적이다.
System.out.println("내림차순 정렬 후 : " + list);
//내림차순 정렬 후 : [홍길동, 일지매, 이순신, 성춘향, 변학도]
}
//정렬 방식을 외부에서 정해주는 class 작성하기
//즉, 외부 정렬 기준 클래스 작성하기 ==> Comparator 인터페이스를 구현해야 한다.
class Desc implements Comparator<String> {
@Override
public int compare(String str1, String str2){
//내림차순으로 정렬되도록 구현하기
if(str1.compareTo(str2) > 0){ //내림차순인 상태
return -1; //음수 반한하면 내림차순 상태
}else if(str1.compareTo(str2) < 0){
return 1;
}else{
return 0;
}
}
}