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 |