본문 바로가기
Coding Test/Tip

comparable? comparator?

by JHyun0302 2023. 9. 10.
728x90
public static void main(String[] args) {
    Integer[] testArr = {1, 5, 100, 23, 2};
    Arrays.sort(testArr);
    System.out.println("Arrays.toString(testArray) = " + Arrays.toString(testArr));
}

 

 

위의 결과는 다음과 같다.

 

 

 

 

public static void main(String[] args) {
    Test test1 = new Test(100, "A");
    Test test2 = new Test(300, "C");
    Test test3 = new Test(200, "B");
    Test[] tests = new Test[]{test1, test2, test3};
    Arrays.sort(tests);
    System.out.println("tests = " + tests);
}

 

위의 결과는?

 

 

기대했던 답 : Test 객체 정렬 & Tests 배열 안의 값

 

 

 

 

 


해결 방법!!

 

`comparable` 와 `comparator`는 객체를 정렬할 때 사용한다.

 

 

 

 

1. comparable : Test 객체에 Comparable  인터페이스를 구현하는 것!

 

Test Object

public class Test implements Comparable<Test> {
    public Integer integer;
    public String string;

    public Test(Integer integer, String string) {
        this.integer = integer;
        this.string = string;
    }

    @Override
    public int compareTo(Test test) {
//        return this.integer - test.integer; //asc
        return test.integer - this.integer; //desc
    }
}

 

 

 

 

main

public static void main(String[] args) {
    Test test1 = new Test(100, "A");
    Test test2 = new Test(300, "C");
    Test test3 = new Test(200, "B");
    Test[] tests = new Test[]{test1, test2, test3};
    Arrays.sort(tests);

    for (int index = 0; index < tests.length; index++) {
        System.out.println("tests.comparable = " + tests[index].string);
    }
}

 

 

위의 결과를 보면 원하는 답을 얻을 수 있다.

 

 

 

 

 

 

 

◎ 참고 : Test object를 abstract class로 정의하면 @Override 하지 않고 `implements Comparable {}`만 작성 후 main 메서드에서 사용하는 시점에 @Override 할 수 있다!

 

 

 

 

 

 

 

 

 


2. comparator : 사용시점에 익명 객체(클래스)를 정의해서 사용한다!

 

 

 

Test Object

public class Test {
    public Integer integer;
    public String string;

    public Test(Integer integer, String string) {
        this.integer = integer;
        this.string = string;
    }
}
 

 

 

 

 

main

public static void main(String[] args) {
    Test test1 = new Test(100, "A");
    Test test2 = new Test(300, "C");
    Test test3 = new Test(200, "B");
    Test[] tests = new Test[]{test1, test2, test3};
    Arrays.sort(tests, new Comparator<Test>() {
        @Override
        public int compare(Test object1, Test object2) {
            return object2.integer - object1.integer;
        }
    });

    for (int index = 0; index < tests.length; index++) {
        System.out.println("tests.comparator = " + tests[index].integer);
    }
}

 

 

 

 

위의 결과를 보면 원하는 답을 얻을 수 있다.

 

 

 

 

 

 

 

 

 

 

 

 

※ 우선순위 : 디테일하게 설정한 부분이 우선순위가 높다!!

comparator > comparable

 

 

 

 

 

 

 

 

 

 

 

반응형

'Coding Test > Tip' 카테고리의 다른 글

BOJ - JAVA 입력 템플릿  (0) 2023.09.13
Primitive? Wrapper? & List? ArrayList?  (0) 2023.09.10