본문 바로가기

Programming/Java & JSP & Spring

[Java] Comparable, Comparator

자바에서 데이터를 정렬하고자 할때 보통 Arrays.sort() 를 사용한다.


이것이 가능한 이유는 원시형(primitive) 타입이나 Wrapper 클래스들은 모두 compareTo() 메소드를

오버라이드하고 있기 때문이다.


compareTo() 메소드가 구현되어 있는 객체는 Arrays.sort() 메소드를 통해 정렬이 가능하다.


하지만 사용자가 만든 객체를 비교하기 위해서는 어떻게 해야할까?

사용자가 만든 객체를 정렬하기 위해서는 객체 안에서 비교할 기준을 정하고, Comparable 인터페이스

구현해야한다.


Comparable 인터페이스 사용하는 방법

구현하는 방법은 비교하려는 객체에 Comparable인터페이스를 implements하고,

int compareTo(T) 메소드를 재정의 하면된다.


Comparable 인터페이스 예시

public class Person implements Comparable<Person>{
private String name;
private int age;

@Override
public int compareTo(Person p){
return this.age - p.age; // 오름차순 정렬

// 내림차순 정렬
// return p.age - this.age;
}
}


이렇게 Comparable 인터페이스를 상속받아 오버라이드한 객체는 Arrays.sort() 메소드를 사용해

age 변수를 기준으로 객체를 정렬할 수 있다.


하지만 때에 따라 비교 되는 기준을 바꿔야 된다면 어떻게 해야할까?

위의 Person클래스에서 age 기준이 아닌 다른 변수를 기준으로 객체를 정렬하고 싶다면 어떻게 해야할까?

그때마다 Person클래스의 compareTo() 메소드를 수정할 수 없는 노릇이다.


그때 사용하는 인터페이스가 Comparator이다.


Comparator 인터페이스를 사용하는 방법

Comparator 인터페이스는 Arrays.sort() 메소드를 사용할 때 정의내린다.

Comparator 인터페이스는 compare 메소드를 정의하고 있다. compare 메소드는 2개의 파라미터를 받아

대소 관계를 정의할 수 있다.


Comparator 인터페이스 예시

Arrays.sort(person, new Comparator<Person>(){
public int compare(Person p1, Person p2){ return p1.point - p2.point; }
});


만약 Arraylist 와 같은 Collection에 객체가 담겨있으면 어떻게 할까?

지금까지 봤던 Arrays.sort() 메소드는 Array(배열)에 해당했을 때 사용가능한 메소드이다.

하지만 객체가 ArrayList와 같은 Collection에 담겨있으면 어떻게 정렬을 사용할까?


위와 유사하지만 Arrays.sort()메소드가 아닌 Collection.sorted() 메소드를 사용하면된다.

'Programming > Java & JSP & Spring' 카테고리의 다른 글

[Java] HashMap 사용법과 정렬  (0) 2018.01.08
[Java] 문자열 거꾸로 뒤집기  (0) 2017.12.24
Polling과 Long Polling  (0) 2017.11.04
OAuth2.0 란?  (0) 2017.11.04
쿠키(Cookie)와 세션(Session)  (0) 2017.11.04