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 메소드를 오버라이드(재정의)하여 사용하며, 이 메소드는 두 개의 객체를 비교하여 정렬 순서를 결정하는 역할을 합니다.
Comarator 인터페이스 구현
new Comparator<String[]>()
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이면 두 객체는 같다는 것을 의미하므로 순서에 상관이 없습니다. 결과가 음수이면 첫 번째 객체가 두 번째 객체보다 작다는 것을 의미하므로, 첫 번째 객체가 앞으로 가야 합니다.