[Java] Comparable, Comparator


ComparableとComparatorとは?


ComparentとComparatorはソートに使用されます.
しかし、両者の使い方には少し違いがあります.
  • Comp耕地:基本的な順序付けが必要な場合にcompareTo()メソッドを実現します.
    -Javaが提供するすべてのソート可能クラスは、Comparetインタフェースを実装し、ソート時に対応するソートを行います.
    -デフォルトでは昇順ソートが実行されます.
  • Comparator:特定のルールをソートする必要がある場合、比較()メソッドを実装します.
    -基本的なソート方法は、昇順ソートと降順ソートです.
  • 使用例

    package sort;
    
    public class Employee implements Comparable<Employee>{
    
    	int eno;
    	String name;
    	String job;
    	String boss;
    
    	Employee(int eno, String name, String job, String boss){
    		this.eno = eno;
    		this.name = name;
    		this.job = job;
    		this.boss = boss;
    	}
    	
    	@Override
    	public int compareTo(Employee o) {
    		// String을 compare 할 때
    		return this.name.compareTo(o.name);
    		// int를 compare 할 때
    		// return this.eno - o.eno;
    	}
    
    ...
    	
    }
    package sort;
    
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    
    public class Main {
    
    	public static void main(String[] args) {
    		Employee emp1 = new Employee(1, "Seo", "디자인", "보스1", 2800);
    		Employee emp2 = new Employee(2, "Kim", "마케팅", "보스2", 3000);
    		Employee emp3 = new Employee(3, "Yong", "인사", "보스3", 2500);
    		Employee emp4 = new Employee(4, "Hong", "개발", "보스4", 4000);
    		Employee emp5 = new Employee(5, "Park", "회계", "보스5", 3500);
    		
    		ArrayList<Employee> list = new ArrayList<Employee>();
    		list.add(emp1);
    		list.add(emp2);
    		list.add(emp3);
    		list.add(emp4);
    		list.add(emp5);
    		
    		// 기존 입력 순서로 출력
    		System.out.println("입력 순서: \n" + list);
    		// Override로 정해놓은 이름 순서로 정렬
    		Collections.sort(list);
    		// 정렬 뒤 순서로 출력
    		System.out.println("Comparable 순서: \n" + list);
    		
    		// 익명클래스로 Comparator 구현
    		Comparator<Employee> salaryCompare = new Comparator<Employee>() {
    			@Override
    			public int compare(Employee o1, Employee o2) {
    				return o2.salary - o1.salary;
    			}
    		};
    		// Comparator 정렬
    		Collections.sort(list, salaryCompare);
    		// 정렬 뒤 순서로 출력
    		System.out.println("Comparator 순서: \n" + list);
    	}
    }

    出力画面



    References


    https://m.blog.naver.com/PostView.nhn?blogId=occidere&logNo=220918234464&proxyReferer=https:%2F%2Fwww.google.co.kr%2F