유블로그

[알고리즘] JAVA 정렬 API 본문

알고리즘

[알고리즘] JAVA 정렬 API

yujeong kang 2020. 8. 6. 11:28

 java.lang.Comparable<T>

  • int compareTo(T other)
  • 자신과 인자로 전달 받는 타 원소와 비교하여 정수 리턴
    •  a.compareTo(b)
    • 음수 :  a가 더 작다. 그대로
    • 0 : a = b
    • 양수 : b 가 더 크다. 자리 바꾼다
    • 오름차순 정렬 됨
class A implements Comparable <A> {
    int num;

    A(int num){
       this.num = num;
    }

    @Override
    public int compareTo(A o){
      return this.num - o.num;		// 정렬 기준은 하나 밖에 안됨.
      // 양수와 음수가 섞여있을 때 오버플로우 방지하려면
      // return Integer.compare(this.num, o.num); 하면 됨
    }

}

public static void main(String[] args){
    A[] arr = new A[3];

    arr[0] = new A(4);
    arr[1] = new A(2);
    arr[2] = new A(3);

    Arrays.sort(arr);

    for(A a : arr) 
      System.out.println(a.num);	// 출력결과 : 2 3 4

}

Arrays.sort(Object[] a, Comparator cp)

java.util.Comparator<T>

 

  • int compare(T o1, T o2)
  • 비교 대상의 두 원소가 아닌 별도의 도우미 역할
  • 두 원소 o1, o2 비교하여 정수 리턴
import java.util.Arrays;
import java.util.Comparator;

class A {
	int a, b;
	
	A(int a, int b){
		this.a = a;
		this.b = b;
	}
	
	@Override
	public String toString() {
		return "(" + this.a + ", " + this.b + ")";
	}
}
class AComparator1 implements Comparator<A> {
	@Override
    public int compare(A o1, A o2){
    	return o1.a - o2.a;
         // 양수와 음수가 섞여있을 때 오버플로우 방지하려면
      	 // return Integer.compare(o1.a, o2.a); 하면 됨
    }
}

class AComparator2 implements Comparator<A> {	// 정렬 기준별로 여러 개 생성 가능
	@Override
    public int compare(A o1, A o2){
    	return (o1.b - o2.b) * -1;	// 내림차순
    }
}

public class test {
	public static void main(String[] args){
	    A[] arr = new A[3];

	    arr[0] = new A(4, 0);
	    arr[1] = new A(2, 3);
	    arr[2] = new A(5, 1);

	    Arrays.sort(arr, new AComparator1());	// (2,3) (4,0) (5,1)
	    System.out.println(Arrays.toString(arr));
        
	    Arrays.sort(arr, new AComparator2());	// (2,3) (5,1) (4,0)
	    System.out.println(Arrays.toString(arr));

	}
	
}