728x90
반응형

Java Collection Sort (List, Array)

 

List 안에 들은 Bean을 정렬해야하는 문제가 발생하여 자바에서 기본 검색만 가능할 줄 알고 논문(?)을 찾아보았는데 해댱 되는 논문이 없다. 그리하여 그럼 자바의 정렬기능으로 가능한가? 라고 생각해서

찾아보았더니 자바에 Comparable 인터페이스를 가지고 Map, List, Set 등의 자바에서 제공하는

Collection 들을 손쉽고 강력하게 정렬할 수 있는 기능을 제공하고 있었다. 그리고 자바에서는

정렬 기능을 합병정렬을 사용하고 있다. (정렬 성능도 우수하지만 정렬시간이 거의 일정함, 하지만 메모리를

자기자신만큼, 그리고 절반씩 쪼개지는 크기들 만큼씩 더 사용한다는게 단점)

(합병정렬 참고 : Merge Sort : http://proneer.tistory.com/292 , http://ko.wikipedia.org/wiki/합병_정렬 )

 

Collection Framework는 크게 3가지 형태로 분류할 수 있는데 간단하게 살펴 보자면
  - Map : key와 Value를 가지는 자료구조. HashMap, Hashtable, TreeMap
  - List : 순서가 있고 중복이 허용되는 자료구조. ArrayList, LinkedList, Vector...
  - Set : 중복을 허용하지 않습니다.  HashSet, TreeSet...

 

위 구조중에 지금 필요한건 List에 Event Bean을 넣고 있기 때문에 해당 정렬 기능을 어떻게

구현하는지 정리해본다. (배열은 Arrays.sort(arr); , 리스트는 Collection.sort(list) )

 

Event Bean을 만들때 Comparable 인터페이스를 가지게 만든다.

그리고 compareTo(Object o) 함수를 만들어 넣는다. compareTo 함수를 오버라이딩 하고

결과를 비교해서는 자기자신이 다른 것보다 앞에 와야하면 -1, 똑같으면 0, 뒤에 와야하면 1을 리턴하면

된다.

 

public class Event implements Serializable, Comparable {

...............

  public int compareTo(Object o) {
      return d_dtstart_time.compareTo(((Event)o).d_dtstart_time); //  ascending 정렬
   }

}

 

그럼 모든 준비는 완료!!

 

그리고 나서 해당 빈을 넣은 리스트를

 

Collections.sort(tmpList);

 

명령만 주면 해당 필드에 대해서 정렬을 완료해준다.  이상으로 정렬 완료!

728x90
반응형
블로그 이미지

nineDeveloper

안녕하세요 현직 개발자 입니다 ~ 빠르게 변화하는 세상에 뒤쳐지지 않도록 우리모두 열심히 공부합시다 ~! 개발공부는 넘나 재미있는 것~!

,