이 블로그 검색

2011년 3월 28일 월요일

자바 정렬


아래 두가지 방법이 있다.

java.lang Interface Comparable<T>
java.util Interface Comparator<T>

두 인터페이스를 이용해서 Collections.sort를 이용해 정렬을 할 수가 있는데,
List에 들어가는 객체에 Comparable을 implements함으로써, 정렬을 할 수있게 된다.

방법1. Comparable을 implements한다.

class PersonalInfo implements Comparable<PersonalInfo>{
 
 private String name = null;
 
 private String phoneNumber = null;
 
 public String getName() {
  return name;
 }
 
 public void setName(String name) {
   this.name = name;
 }
 
 public String getPhoneNumber() {
  return phoneNumber;
 }
 
 public void setPhoneNumber(String phoneNumber) {
  this.phoneNumber = phoneNumber;
 }
 
  public boolean getSortingMode() {
  return sortingMode;
 }
 public void setSortingMode(boolean sortingMode) {
  this.sortingMode = sortingMode;
 }
 
 
@Override
 public int compareTo(PersonalInfo o) {
    return name.compareTo( o.getName() );
  }
}

compareTo라는 메소드를 구현해야 하는데, 그 안에 비교하고자 하는 항목을 compareTo를 이용하여
비교해준 후,
Collections.sort()의 파라미터로 PersonalInfo객체가 들어있는 리스트를 넣어주기만 하면 된다.

위와 같은 방법은 편리하나, 여러가지 항목으로 정렬을 해야 할 경우 제약이 좀 있다.

그래서 사용하는 것이,
바로 Comparator 이다.

방법2. Comparator사용.

     Comparator<PersonalInfo> comparator = new Comparator<PersonalInfo>(){
      @Override
      public int compare(PersonalInfo o1, PersonalInfo o2) {      
       return o1.getName().compareTo( o2.getName() );
      }      
     };
     Collections.sort( list, comparator );

와 같은 방법으로 할 수 있다. 여러개의 정렬 항목에 따른 comparator를 만든 후, Collections의 파라미터로 던져주면,
정렬은 더이상 고민하지 않아도 될 것이다.

참고로 Collections.sort()의 documents내용은 다음과 같다.
public static <T extends Comparable<? super T>> void sort(List<T> list)
public static <T> void sort(List<T> list, Comparator<? super T> c)

댓글 없음:

댓글 쓰기