Arrays.sort() & Collections.sort()
sorting을 할 때는 배열을 정렬할 것인지 collection을 정렬할 것인지에 따라 사용하는 클래스가 달라집니다. 메소드 이름은 sorting으로 같지요.
먼저 배열을 정렬할 때는 Arrays.sort(numbers); 같은 식으로 하면 됩니다.
1262402644.bmp
여기 있는 메소드들이 Arrays 클래스에 있는 sort라는 이름을 가진 메소드 목록입니다. 배열은 객체가 아니더군요. 그래서 Arrays 클래스가 배열이 객체라면 해줄 행동들을 대신 해줍니다.
그리고 List 타입을 정렬하고자 할 때는 Collections.sort(List 타입의 변수); 같은 식으로 사용하면 됩니다.
1096644530.bmp
List 타입이라고 하면 ArrayList, LinkedList, Vector들 중 하나라고 할 수 있겠습니다. 이 들 간의 상속 구조는 다음과 같습니다.
1153054852.bmp
겉으로 보기에는 둘이 차이가 나고 있지만 사실 소스코드를 보면 Collections.sort() 메소드는Arrays.sort()를 사용하고 있습니다.
Collections.sort() 메소드 소스코드 보기
[#M_ more.. | less.. |
public static <T extends Comparable<? super T>> void sort(List<T> list) {
Object[] a = list.toArray();
Arrays.sort(a);
ListIterator<T> i = list.listIterator();
for (int j=0; j<a.length; j++) {
i.next();
i.set((T)a[j]);
}
}
_M#]
따라서 결국 Collection들이 배열을 기반으로 구현되었으며 그래서 정렬을 할 때도 내부적으로 배열을 사용하여 정렬하고 있는 것이라고 생각할 수 있겠습니다.