[Java] Comparable, Comparator

Ogu·2022년 4월 21일
0

ComparatorComparable은 모두 인터페이스로 컬렉션을 정렬하는데 필요한 메서드를 정의하고 있다. 우리가 이 인터페이스를 구현하는데 생각해야할 것은 "어떤 기준으로 객체를 비교하게 만드는가" 이다.

📌 Comparable과 Comparator의 차이점

Comparable : 자기 자신과 매개변수 객체를 비교
Comparator : 두 매개변수 객체를 비교

🌵 Comparable

자기 자신과 매개변수 객체를 비교한다.

Comparable 인터페이스 정의

사용방법

compareTo 함수를 구현한다.

public clas ClassName implements Comparable<T> {
/*
  ...
  code
  ...
 */
 
	// 필수 구현 부분
	@Override
	public int compareTo(Type o) {
		/*
		 비교 구현		

}

예제

대부분의 경우 아래와 같이 간단한 뺄셈만으로 compareTO()를 구현할 수 있지만, 보다 나은 성능을 위해서는 삼항 연산자를 사용한다. (Integer클래스의 compareTo()함수들 참고)

class Student implements Comparable<Student> {
 
	int age;			// 나이
	int classNumber;	// 학급
	
	Student(int age, int classNumber) {
		this.age = age;
		this.classNumber = classNumber;
	}
	
	@Override
	public int compareTo(Student o) {
		return this.age - o.age;
	}
}

🌵 Comparator

두 매개변수 객체를 비교

Comparator 인터페이스 정의

사용방법

compare() 함수를 구현한다.

import java.util.Comparator;	// import 필요
public class ClassName implements Comparator<Type> { 
 
/*
  ...
  code
  ...
 */
 
	// 필수 구현 부분
	@Override
	public int compare(Type o1, Type o2) {
		/*
		 비교 구현
		 */
	}
}

예제1

import java.util.Comparator;	// import 필요
class Student implements Comparator<Student> {
 
	int age;			// 나이
	int classNumber;	// 학급
	
	Student(int age, int classNumber) {
		this.age = age;
		this.classNumber = classNumber;
	}
	
	@Override
	public int compare(Student o1, Student o2) {
		return o1.classNumber - o2.classNumber;
	}
}

예제2

import java.util.Comparator;	// import 필요
class DescComp implements Comparator {  // 객체 2개 비교
	public int compare(Object o1, Object o2) {
		if(!(o1 instanceof Integer && o2 instanceof Integer))
			return -1;
		
		Integer i = (Integer)o1;
		Integer i2 = (Integer)o2;
		
		return i.compareTo(i2) * -1;
	}
}

🌵 참고 URL

profile
私はゲームと日本が好きなBackend Developer志望生のOguです🐤🐤

0개의 댓글