이를 개선하기 위해 Java에서는 sort()메서드가 java.util 패키지에 내장되어 있습니다.해당 메서드의 사용방법에 대하여 정수가 담긴 배열과 컬렉션을 통해 말씀드려볼까 합니다.
Integer[] arr = { 4, 8, 2, 7, 6 };
for (int i = 0; i < arr.length; i++) {
System.out.printf("정렬하지 않은 배열 arr[%d] : %d\n", i, arr[i]);
}
Arrays.sort(arr);
for (int i = 0; i < arr.length; i++) {
System.out.printf("정렬된 배열 arr[%d] : %d\n", i, arr[i]);
}
<※ 결과는 다음과 같습니다.>
System.out.println("정렬하지 않은(ArrayList) : " + list);
list.sort(null);
System.out.println("정렬한 (ArrayList) : " + list);
<※ 결과는 다음과 같습니다.>
Comparable은 Integer, Double, String에 인터페이스를 구현하고 있습니다.따라서 해당 자료형의 제네릭을 가지는 컬렉션이나 배열은 자동정렬이 가능한 것입니다.
바로 Comparator를 통해 개별적으로 구현해주는 것입니다.
class Coffee implements Comparable<Coffee>{
String name;
int price;
public Coffee(String name, int price) {
this.name = name;
this.price = price;
}
@Override
public String toString() {
return String.format("%s : %,d", name, price);
}
@Override
public int compareTo(Coffee o) {
return this.price - o.price;
}
}
public class Ex02 {
public static void main(String[] args) {
Coffee ob1 = new Coffee("아메리카노", 2000);
Coffee ob2 = new Coffee("디카페인 아메리카노", 2300);
Coffee ob3 = new Coffee("헤이즐넛 아메리카노", 2500);
Coffee ob4 = new Coffee("콜드브루 라떼", 4000);
Coffee ob5 = new Coffee("콜드브루 돌체라떼", 4500);
Coffee[] arr = { ob4, ob1, ob3, ob5, ob2 };
ArrayList<Coffee> list = new ArrayList<Coffee>(Arrays.asList(arr));
list.forEach(c -> System.out.println(c));
System.out.println();
list.sort(null); // Comparator는 전달하지 않았음
list.forEach(c -> System.out.println(c));
System.out.println();
// comparable에서 지정한 방식이 아닌, 다른 형태로 정렬을 수행하려면 Comparator를 사용한다
Comparator<Coffee> comp = new Comparator<Coffee>() {
@Override
public int compare(Coffee o1, Coffee o2) {
return o1.name.compareTo(o2.name);
}
};
list.sort(comp); // comp는 이름 기준 오름차순 정렬의 규칙이다
list.forEach(c -> System.out.println(c));
System.out.println();
Comparator<Coffee> comp2 = (o1, o2) -> o2.name.compareTo(o1.name);
list.sort(comp2); // comp2는 이름 기준 내림차순 정렬의 규칙이다
list.forEach(c -> System.out.println(c));
System.out.println();
}
}
<※ 결과는 다음과 같습니다.>