Language/Java

Comparator와 Comparable

원2 2021. 3. 31. 11:42
728x90
반응형

// Comparable : 기본 정렬기준을 구현하는데 사용
// Comparator : 기본 정렬기준 외에 다른 기준으로 정렬하고자 할 때 사용.
// compareTo  : 비교 한다는 목적으로 고안됨. 비교 객체의 값이 같으면 0, 작으면 음수, 크면 양수
// a 문자열과 b 문자열을 비교할 때 첫번째자리에서 비교 , a열의 첫 글자 - b 열의 첫 글자 = ?
// if 첫글자가 같다면 두번째 자리를 비교, 같다? 세번째 ....이런식.
// 유니코드의 순서가 작은 값에서부터 큰 값으로 정렬됨.
// 배열을 기본정렬 : 숫자가 작은것 부터 순서대로 정렬됨. : A 의 아스키 코드가 a의 아스키 코드보다 작다.

import java.util.*;

public class Ex11_7 {

	public static void main(String[] args) {

		String[] strArr = { "cat", "Dog", "lion", "tiger" };

		Arrays.sort(strArr); 							// String Comparable 구현에 의한 정렬
		System.out.println("strArr=" + Arrays.toString(strArr));

		Arrays.sort(strArr, String.CASE_INSENSITIVE_ORDER); // 대소문자 구분안함
		System.out.println("strArr=" + Arrays.toString(strArr));

		Arrays.sort(strArr, new Descending()); 				// 역순 정렬
		System.out.println("strArr=" + Arrays.toString(strArr));

	}
}

class Descending implements Comparator {  //인터페이스를 상속받아서 만들었다.
	public int compare(Object o1, Object o2) {
		if (o1 instanceof Comparable && o2 instanceof Comparable) {
			//instanceof : 참조하고 있는 인스턴스의 존재여부를 알기 위해 사용
			Comparable c1 = (Comparable) o1;
			Comparable c2 = (Comparable) o2;  
			return c1.compareTo(c2) * -1; // -1을 곱해서 기본 정렬방식의 역순으로 변경한다.
										  // 또는 c2.compareTo(c1) 처럼 순서를 바꿔도 된다.
		}								  // 비교를 해서 0,음수,양수를 반환하기 위해서 만드는 클래스.
		return -1; 
	}
}
728x90
반응형

'Language > Java' 카테고리의 다른 글

aVector의 객체 추가, 변경, 삭제  (0) 2021.03.31
숫자의 기본정렬과 역순정렬  (0) 2021.03.31
Vector  (0) 2021.03.31
컬렉션의 정리 , A와a의 순서 비교법 기본  (0) 2021.03.31
Arrays Method - 변환 // 수정필  (0) 2021.03.30
binarySearch  (0) 2021.03.30