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);
명령만 주면 해당 필드에 대해서 정렬을 완료해준다. 이상으로 정렬 완료!
mysql의 최대 성능 향상 방법 (0) | 2010.03.19 |
---|---|
dom4j 사용하기 (0) | 2010.03.19 |
org.apache.commons.io.IOUtils.copy (0) | 2010.02.25 |
java FILE 객체 사용하기 (3) | 2010.02.25 |
한글 고민 끝 .. 한글 테스트 jsp, java (0) | 2010.02.23 |