Comparator & Comparable

2613 ワード

オブジェクトのソートに必要なメソッド(ソート基準を指定)を定義するインタフェース

  • ソート:sort().2つのターゲットを比較した後、位置を変更します.この手順を繰り返します->いずれの位置合わせも、この原理は同じです.(不変)

  • ただし、ソート基準は毎回異なる場合があります.(可変)->位置合わせによってのみ変化する部分を指定します.
  • // ex. 버블 정렬
    // int[] intArr = {5, 3, 4, 0, 1, 2};
    
    static void sort(int[] intArr) {
    	for (int i = 0; i < intArr.length - 1; i++) {
        	for (int j = 0; j < intArr.length - 1; j++) {
            	int tmp = 0;
                
                if (intArr[j] > intArr[j + 1]) {	// 비교 기준. 정렬 기준만 가변적임.
                	tmp = intArr[j];
                    intArr[j] = intArr[j + 1];
                    intArr[j + 1] = tmp;
                }
            }
        }
    }
    
    //					정렬대상		  정렬기준
    static void sort(Object[] objArr, Comparator c) {
    	for (int i = 0; i < objArr.length - 1; i++){
        	for (int j = 0; j <objArr.length - 1; j++) {
            	Object tmp = null;
                
                // 정렬 기준이 Comparator c로 넘어와서 정렬 기준(비교) 제공
                if (c.compare(objArr[j], objArr[j+1]) > 0) {
                	tmp = objArr[j];
                    objArr[j] = objArr[j + 1];
                    objArr[j + 1] = tmp;
                }
            }
        }
    }
    
  • のソートを行うには、次の2つのインタフェースを表すソートオブジェクトと基準が必要です.
  • // default = comparable
    static void sort(Object[] a)  // 객체 배열에 저장된, 객체가 구현한 Comparable에 의한 정렬
    
    static void sort(Object[] a, Comparator c)  // 지정한 Comparator에 의한 정렬

    Comparable

  • は、デフォルトのソート基準
  • を実施するために使用される.
    public interface Comparable {
    	int compareTo(Object o);  // 주어진 객체(o)를 자신(this)과 비교
    }
    // Integer & Comparable
    // 기본 정렬 기준 제공
    
    public final class Integer extends Number implements Comparable {
    	public int compareTo(Object o) {
        	return compareTo((Integer) o);
        }
        
        public int compareTo(Integer anotherInteger) {
        	int thisVal = this.value;
            int anotherVal = anotherInteger.value;
            
            // -1, 0, 1
            return (thisval < anotherVal ? -1 : (thisVal == anotherVal ? 0 : 1));
            // 위 리턴문은 아래와 같이 표현할 수도 있다. (음수, 0, 양수)
            // 다만, 삼항연산자의 연산 속도가 조금이라도 더 빠르기 떄문에, 뺄셈보다는 삼항연산자를 사용한 것이다.
            return thisVal - anotherVal
        }
    }

    Comparator


  • デフォルトのソート条件以外の条件でソート

  • 昇順、降順など、様々なソート基準があります.
  • public interface Comparator {
    	int compare(Object o1, Object o2);  // o1, o2 두 객체를 비교 -> 정수값 반환.
        									// 값이 0이면 같은것, 양수면 왼쪽이 큰것, 음수면 오른쪽이 큰것
        boolean equals(Object obj);			// equals를 오버라이딩 하라는 뜻
    }