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 |