Comparable 과Comparator

canyi·2023년 6월 23일
0

java m1

목록 보기
31/40

Comparable

  • 자기자신과매개변수객체를비교 - compareTo 메서드를 구현
    Comparator
  • 두개의매개변수객체를비교 - compare 메서드를 구현

정렬 메서드

  • compare()와 compareTo()는 두 객체의 비교 결과를 반환하도록 작성한다 - 같으면0,오른쪽이더크면음수,작으면양수
  • 자바는 양수가 나오면 두 원소의 위치를 교환한다.

Comparable 예시

import java.util.*;

public class ex08_Comparable {
	public static void main(String[] args) {

		ArrayList<User> list = new ArrayList<>();
		list.add(new User("김자바", "KimJava"));
		list.add(new User("이자바", "LeeJava"));
		list.add(new User("배자바", "BaeJava"));
		list.add(new User("홍자바", "HongJava"));
		list.add(new User("을자바", "EulJava"));
		
		System.out.println("a".compareTo("b"));		// -1. 교환이 이루어지지 않음
		
		Collections.sort(list); // compareTo()를 이용하여 정렬한다

		for (int i = 0; i < list.size(); i++) {
			System.out.println(((User) list.get(i)).getEngName());
		}
	}
}

class User implements Comparable<User> {
	String name;
	String engName;

	public User(String name, String engName) {
		this.name = name;
		this.engName = engName;
	}

	public String getName() {
		return name;
	}

	public String getEngName() {
		return engName;
	}

	@Override
	public int compareTo(User user) {
		return this.engName.compareTo(user.engName);	// 사전순 정렬 
	}
}

Comparator 예시

package ch11_컬렉션_프레임워크2;

import java.util.*;

public class ex09_Comparator {
	public static void main(String[] args) {
		String[] strArr = { "cat", "Dog", "duck", "tiger" };

		Arrays.sort(strArr); // String의 Comparable구현에 의한 정렬
		System.out.println("strArr=" + Arrays.toString(strArr));

		Arrays.sort(strArr, String.CASE_INSENSITIVE_ORDER); // 대소문자 구분안함
		System.out.println("strArr=" + Arrays.toString(strArr));

		Arrays.sort(strArr, new Descending()); // 역순 정렬
		System.out.println("strArr=" + Arrays.toString(strArr));
	}
}

class Descending implements Comparator<String> {
	// o1: 먼저 나온값, o2: 나중에 나온값
	public int compare(String o1, String o2) {
			String c1 = o1;
			String c2 = o2;
			return c1.compareTo(c2) * -1; // -1을 곱해서 기본 정렬방식의 역으로 변경한다.
											// 또는 c2.compareTo(c1)와 같이 순서를 바꿔도 된다.
	}
}

profile
백엔드 개발 정리

0개의 댓글