[Java] Comparable & Comparator

정석·2024년 6월 5일

Java

목록 보기
39/39
post-thumbnail

Comparable

  • 비교하고자 하는 클래스에 Comparable 인터페이스를 구현하며, compareTo 메서드를 원하는 비교 방식으로 정의한다.
class Student implements Comparable<Student> {
	int age;
	int classNumber;
	
	Student(int age, int classNumber) {
		this.age = age;
		this.classNumber = classNumber;
	}
	
	public int compareTo(Student o) {
		return -(this.classNumber - o.classNumber);
		// 음수면 오름차순 & 양수면 내림차순
	}
}

위와 같이 구현하였을 때, Arrays.sort를 하면 compareTo에서 정의된 방식으로 정렬된다.
따라서 오름차순 or 내림차순 정렬을 각 객체의 필드 값으로 따로 정렬할 수 있게 된다.


Comparator

  • 매개변수 두 객체를 비교한다.
public class Main {
	public static void main(String[] args) throws IOException {
		
		Comparator<Student> comp1 = new Comparator<>() {
			public int compare(Student o1, Student o2) {
				return o1.classNumber - o2.classNumber;
			}
		};
		
		Student s1 = new Student(20,3);
		Student s2 = new Student(13,1);
		Student s3 = new Student(19,2);
		
		Student[] students = {s1, s2, s3}; 
		
		int result = comp1.compare(s1, s2);
		
		if (result > 0) {
			System.out.println("s2 < s1");
		}
		else if (result == 0) {
			System.out.println("=");
		}
		else {
			System.out.println("s2 > s1");
		}
	}
}

익명 객체를 생성하여 해당 객체 안에서 compare 메서드를 정의하며 비교하고자 하는 방식을 구현한다.

0개의 댓글