Comparator [JAVA]

jbong·2024년 2월 24일

JAVA

목록 보기
3/3
post-thumbnail

Prologue

Comparator에 대해 개념이 무엇인지, 어떨 때 쓰는지 이야기 해보려고 합니다 !!


✔ 개념

Comparator는 Java에서 제공하는 인터페이스로, 두 객체를 비교하는데 사용됩니다.
이 인터페이스는 주로 정렬이 필요한 곳 에서 사용되며, JAVA에서 Arrays.sort() 또는 Collections.sort() 메소드에서 사용됩니다.

✍문법

        Arrays.sort(arr, new Comparator<String[]>() {
            @Override
            public int compare(String[] o1, String[] o2) {
                if(o1[0]==o2[0]){               
                }
                else{                
                }
            }
        });

Comparator 인터페이스는 compare 메소드를 오버라이드(재정의)하여 사용하며, 이 메소드는 두 개의 객체를 비교하여 정렬 순서를 결정하는 역할을 합니다.

  1. Comarator 인터페이스 구현

    new Comparator<String[]>()
  2. compare 메소드를 오버라이드(재정의)

    public int compare(String[] o1, String[] o2)

위는 두 개의 객체를 비교하여 정렬 순서를 결정하는 역할을 합니다.


🌙예제

🟩나이순 정렬을 하는 예제🟩![]

전체 코드

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner;
import java.util.StringTokenizer;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        String[][] arr = new String[n][2];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < 2; j++) {
                arr[i][j] = sc.next();
            }
        }
        Arrays.sort(arr, new Comparator<String[]>() {
            @Override
            public int compare(String[] o1, String[] o2) {
                if(o1[0]==o2[0]){
                    return Integer.parseInt(o1[1])-Integer.parseInt(o2[1]);
                }
                else{
                    return Integer.parseInt(o1[0])-Integer.parseInt(o2[0]);
                }
            }
        }); 
        for (int i = 0; i < n; i++) {
            System.out.println(arr[i][0]+" "+arr[i][1]);
        }
    }
}

주요코드

Arrays.sort(arr, new Comparator<String[]>() {
            @Override
            public int compare(String[] o1, String[] o2) {
                if(o1[0]==o2[0]){
                    return Integer.parseInt(o1[1])-Integer.parseInt(o2[1]);
                }
                else{
                    return Integer.parseInt(o1[0])-Integer.parseInt(o2[0]);
                }
            }
        }); 

조건문 설명

Integer.parseInt(o1[1]) - Integer.parseInt(o2[1])와 같은 뺄셈 연산을 통해 두 객체의 차이를 구하고, 그 결과에 따라 정렬 순서를 결정하고 있습니다.
결과가 양수이면 첫 번째 객체가 두 번째 객체보다 크다는 것을 의미하므로, 첫 번째 객체가 뒤로 가야 합니다. 결과가 0이면 두 객체는 같다는 것을 의미하므로 순서에 상관이 없습니다. 결과가 음수이면 첫 번째 객체가 두 번째 객체보다 작다는 것을 의미하므로, 첫 번째 객체가 앞으로 가야 합니다.

따라서 이 뺄셈 연산을 통해 두 객체의 상대적인 크기를 판단하고, 그에 따라 정렬 순서를 결정하게 됩니다. 이런 방식은 특히 숫자를 다루는 경우에 유용하게 사용할 수 있다 !


profile
노력하는 개미

0개의 댓글