본문 바로가기
WEB/Back-end

Comparable, Comparator (Java)

by 최새벽 2024. 7. 18.

Comparable과 Comparator

  • 객체가 Comparable 인터페이스를 구현하고 있어야 정렬 가능
  • Integer, Double, String 타입은 구현 하고 있어서 사용 가능
  • 사용자 정의 객체를 저장할 시에는 Comparable을 구현하고 있어야 사용 가능 함(오버라이딩)
  • compareTo : 주어진 객체와 같으면 0, 작으면 음수, 크면 양수 return
  • 비교 예시
public class SortEx {
    public static void main(String[] args) {

        // 기본자료형 정렬
        int[] array = { 50, 10, 60, 30, 80, 40, 90 };
        Arrays.sort(array); // 오름차순

        // Arrays.sort(array, Collections.reverseOrder());// 기본자료형은 해당 방식 에러 발생
        System.out.println(Arrays.toString(array));


        // 참조자료형 배열
        Integer[] array2 = new Integer[] { 50, 10, 60, 30, 80, 40, 90 };

        // Arrays.sort(array2); // 오름차순
        Arrays.sort(array2, Collections.reverseOrder());// 내림차순
        System.out.println(Arrays.toString(array2));


        // Person 대신 Map 사용 => List 객체에 Map 담기
        // 나이순 정렬
        List<Map<String, Object>> list = new ArrayList<>();

        // K: 이름, V: 나이
        Map<String, Object> person = new HashMap<>();
        person.put("name", "홍길동");
        person.put("age", 45);
        list.add(person);

        person = new HashMap<>();
        person.put("name", "감자바");
        person.put("age", 25);
        list.add(person);

        person = new HashMap<>();
        person.put("name", "박지원");
        person.put("age", 31);
        list.add(person);

        System.out.println(list);

        // 정렬
        // 기본 자료형의 래퍼 클래스가 제네릭 타입인 경우
        List<Integer> list2 = new ArrayList<>();
        list2.add(10);
        list2.add(30);
        Collections.sort(list2);

        // list 안에
        // 제네릭 타입이 Map<String, Integer>
        Collections.sort(list, new Comparator<Map>(){
            @Override
            public int compare(Map o1, Map o2) {
                // return (int) o1.get("age") - (int)o2.get("age"); // 오름차순
                return (int) o2.get("age") - (int)o1.get("age"); // 내림차순
                }
            });
        System.out.println(list);
        System.out.println(list.get(2).get("name")); // 3번째로 나이가 많은 사람 출력
    }
}

'WEB > Back-end' 카테고리의 다른 글

JpaRepository, 페이징처리(SpringBoot)  (0) 2024.07.29
JPA, Entity Class(SpringBoot)  (0) 2024.07.29
properties, path, lambda, stream (Java)  (0) 2024.07.18
컬렉션_List, Set, Map (Java)  (0) 2024.07.18
멀티스레드, 동기화 (Java)  (0) 2024.07.18