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)

  1. 오름차순 정렬 : return this - other
  2. 내림차순 정렬 : 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)

  1. 오름차순 정렬 : o1 - o2
  2. 내림차순 정렬 : 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

+ Recent posts