1.5버전이후인가?? 아무튼 언제부터인가 이클립스의 느낌표를 클릭하면

자동 생성되는 Generic이란 녀석 :)

그냥 그렇게 생각했었는데, 생각외로 여러모로 쓸모가 많았다.

C++의 템플릿의 비스무리 한거 같기도 하지만서도ㅋㅋ

 

늘 자료구조때 골머리를 앓게 하는건, 검색과 정렬이다.

아직도 수많은 컴퓨터공학도들이

자료구조란 학문을 하며 골머리를 썩고 있는데ㅋㅋ

 

그만큼 자료구조라는 학문이 중요하기 때문이고

모든 컴퓨터공학의 근간이 되는 학문임은 강조에 강조를 해도

부족하지 않다.

 

자바를 쓰다보면 느꼈던건 역시 막강하고 손쉽게 사용할 수 있는 API에 있다.

이번에도 항상 나만의 정렬, 검색 알고리즘을 구현(?)해서 사용하다가,

이번에 Collections를 이용해봤는데, 여간 편리한게 아니다-_ -);

역시 난 시대에 뒤떨어지고 있었던 것인가??;;

 

그래서 잠깐 소개하고자 한다.

 

먼저 알아야 할것은 바로 이 두 interface다.

 

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)

 




[출처 : http://blog.naver.com/celestialorb/40065368727]

+ Recent posts