[Java] 정렬 - sort, comparable, comparator
2021. 4. 12. 20:26
1. 사용법
1.1 오름차순/내림차순 정렬
int[] arr1 = { 2, 1, 50, 4, 29 };
String[] arr2 = { '차', '나', '바', '하', '니' };
List<Integer> list = new ArrayList<Integer>();
// 오름차순 정렬
Arrays.sort(arr1); // 1, 2, 4, 29, 50
Arrays.sort(arr2); // 나, 니, 바, 차, 하
Collections.sort(list);
// 내림차순 정렬
Arrays.sort(arr1, Collections.reverseOrder()); // 50, 29, 4, 2, 1
Arrays.sort(arr2, Collections.reverseOrder()); // 하, 차, 바, 니, 나
1.2 사용자 정의 기준 정렬
Comparable 인터페이스 ( 한가지 기준 )
compareTo(T other)
- 오름차순 정렬 : return this - other
- 내림차순 정렬 : return other - this
public class Fruit implements Comparable<Fruit> {
// Fruit 클래스 정의
public String name;
public int quantity;
public Fruit(String name, int quantity){
this.name = name;
this.quantity = quantity;
}
// fruits 배열 정렬 기준을 사용자가 새롭게 정의
@Override
public int compareTo(Fruit other) {
// 수량을 기준으로 오름차순 정렬. 작은 값 우선
return quantity - other.quantity;
}
}
Fruit [] fruits = new Fruit[4];
fruits[0] = new Fruit("Pineapple", 70);
fruits[1] = new Fruit("Apple", 30);
fruits[2] = new Fruit("Orange", 50);
fruits[3] = new Fruit("Banana", 80);
Arrays.sort(fruits); // Banana, Pineapple, Orange, Apple
Comparator 객체 ( 두가지 이상의 기준 )
- 정렬 대상 클래스의 코드를 직접 수정할 수 없는 경우 사용
compare(T o1, T o2)
- 오름차순 정렬 : o1 - o2
- 내림차순 정렬 : o2 - o1
// 과일명의 오름차순으로(사전순) 정렬
Comparator<Fruit> nameComparator = new Comparator<Fruit>(){
public int compare(Fruit f1, Fruit f2){
return f1.name.compareTo(f2.name);
}
};
// 과일양의 내림차순으로 정렬
Comparator<Fruit> quantComparator = new Comparator<Fruit>(){
public int compare(Fruit f1, Fruit f2){
return f1.quantity - f2.quantity;
}
};
// 가격의 오름차순으로 list 정렬하는 방법
class FruitPriceComparator implements Comparator<Fruit> {
@Override
public int compare(Fruit f1, Fruit f2) {
if (f1.price > f2.price) {
return 1;
} else if (f1.price < f2.price) {
return -1;
}
return 0;
}
}
Arrays.sort(fruits, nameComparator); // Apple, Banana, Orange, Pineapple
Arrays.sort(fruits, quantComparator); // Banana, Pineapple, Orange, Apple
'Java' 카테고리의 다른 글
[Java] 문자열(String) 비교 (0) | 2021.04.14 |
---|---|
[Java] Iterator (0) | 2021.04.12 |
[Java] list (0) | 2021.04.12 |
[Java] Set (0) | 2021.04.11 |
[Java] Stack (0) | 2021.04.09 |