정렬과 관련된 interface는 Comparable, Comparator 이렇게 두 가지가 있다.
- Comparable은 Collection에 추가되는 데이터 자체에 정렬 기준을 넣고 싶을 때 구현하는 interface이다.
 이것을 내부 정렬 기준이라 한다.
- Comparator는 외부에 별도로 정렬 기준을 구현하고 싶을 때 구현하는 interface이다.
 이것을 외부 정렬 기준이라 한다. // 외부정렬기준은 내가 정의한 기준으로 정렬 가능?
- Comparable에서는 CompareTo()메서드를 재정의하고
  Comparator에서는 compare()메서드를 재정의 해야 한다.
- String클래스, Wrapper클래스, Date클래스, File클래스에는 내부 정렬 기준이 구현되어 있다.
(내부 정렬 기준은 오름 차순으로 처리되도록 구현되어 있다.)
package kr.or.ddit.basic;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;


public class ListSortTest01 {

	public static void main(String[] args) {
		ArrayList<String> list = new ArrayList<String>();
		
		list.add("일지매");
		list.add("홍길동");
		list.add("성춘향");
		list.add("변학도");
		list.add("이순신");
		
		System.out.println("정렬 전 : " + list);
		
		// 정렬은 Collections.sort()메서드를 이용하여 정렬한다.
		// Collections.sort()메서드는 기본적으로 내부 정렬 기준으로 정렬한다.
		Collections.sort(list);
		
		System.out.println("정렬 후 : " +list); //정렬기준 기본값이 오름차순
		
		Collections.shuffle(list); 		// 자료 섞기
		System.out.println("자료 섞기 후: " + list); // 출력할때마다 바뀜
		System.out.println();
		
		// 외부 정렬 기준을 이용해서 정렬하기
		Collections.sort(list, new Desc());
		System.out.println("내림차순 정렬 후 : " + list);
		
	}

}
외부 정렬 기준을 구성하는 class 작성하기 ==> 외부 정렬 기준 클래스라고 한다.
==> Comparator 인터페이스를 구현해서 작성한다.

//이 compare()메서드를 이용하여 정렬하고자하는 기준을 정해준다.
// compare()메서드의 반환값의 의미
// (리턴값)0일 때 ==> 두 값이 같다.
// 양수 일 때 ==> 앞, 뒤의 순서를 바꾼다.
// 음수 일 때 ==> 앞, 뒤의 순서를 바꾸지 않는다.
// 예) 오름차순 정렬일 경우 ==> 앞의 값이 크면 양수, 같으면 0, 앞의값이 작으면 음수가 반환되도록 구현하면
         된다.
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;
//		}
		return str1.compareTo(str2) * -1;
	}
	
}

'JAVA 복습 & 정리' 카테고리의 다른 글

[HighJava] ListSort02  (0) 2022.12.20
[HighJava] Stacktest  (1) 2022.12.20
[HighJava] Stack,Queue  (0) 2022.12.20
[HighJava] ArrayListTest04  (0) 2022.12.20
[HighJava] ArrayListTest03  (0) 2022.12.20

+ Recent posts