본문 바로가기
Java

Comparable , Comparator

by bloodFinger 2019. 12. 14.

Comparable 과 Comparator하면 객체 정렬 을 떠올려야 한다!!!!

 

1. Comparable (java.lang)

- 기본 정렬기준을 구현하는데 사용

- 주로 Integer와 같은 warpper클래스와 String, Date, File과 같은 것

- 기본적으로 오름차순으로 정렬되도록 구현되어 있다

- public int compareTo(T o)

public final class Integer

extends Number

implements Comparable<Integer>

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

	public PersonDTO(String name , int age){
		this.name = name;
		this.age = age;
	}

	public String getName(){
		return name;
	}
	public int getAge(){
		return age;
	}

	public String toString(){
		return "이름 : " + name +" 나이 : " + age; 
	}

	@Override
	public int compareTo(PersonDTO o){
		/* 오름차순
		if(this.age < o.age)
			return -1; 
		else if(this.age > o.age)
			return 1;
		else
			return 0;
			*/

		/*내림차순*/
		if(this.age < o.age)
			return 1; 
		else if(this.age > o.age)
			return -1;
		else
			return 0;
	}
}

 

 

 

2. Comparator (java.util)

- 기본 정렬기준 외에 다른 기준으로 정렬하고자할 때 사용

- public int compare(T o1, T o2)

public boolean equals(Object obj)

 

 

import java.util.Arrays;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
class PersonSort 
{
	public static void main(String[] args) 
	{
		String[] ar = {"orange","apple","banana","pear","peach","applemango"};
		Arrays.sort(ar);
		
		for(String data : ar){
			System.out.println(data + " ");
		}
		System.out.println();
	//--------------------------------------------------------------
		PersonDTO aa = new PersonDTO("코난",13);
		PersonDTO bb = new PersonDTO("또치", 14);
		PersonDTO cc = new PersonDTO("길동", 44);

		ArrayList<PersonDTO> list = new ArrayList<PersonDTO>();
		list.add(aa);
		list.add(bb);
		list.add(cc);

		Collections.sort(list);
		System.out.println("나이로 정렬 : " + list);
		
		System.out.println("이름으로 정렬 " );
		//인터페이스 이므로 new 를 못쓰기에 익명객체를 만들어준다
		Comparator<PersonDTO> com = new Comparator<PersonDTO>(){
			@Override
			public int compare(PersonDTO p1, PersonDTO p2){
				//return p1.getName().compareTo(p2.getName()); //오름차순
			
				return (p1.getName().compareTo(p2.getName())) * -1;
			}
		};

		Collections.sort(list, com);
		System.out.println(list);

	}
}

* 일반적으로 Comparator를 만들 때 위의 예제처럼 익명 클래스를 만들어서 사용한다.

왜냐하면 Comparator를 사용하는것 자체가 그 때 그 때마다 정렬 기준이 바뀔 수 있는 것이기 때문이다.

 

 

즉, 정리하자면 Comparable 은 일반적인 정렬 , Comparator는 customize 정렬에 사용된다!!

'Java' 카테고리의 다른 글

디자인패턴(템플릿 메소드 패턴 / 팩토리 메소드 패턴)  (0) 2019.12.16
Thread를 이용한 실시간 시계  (0) 2019.12.14
달력 검색  (0) 2019.12.14
Stream  (0) 2019.12.14
Wrapper Class - AutoBoxing  (0) 2019.12.13