Java

Java에서의 여러가지 정렬(Sorting)

소밍소밍 2022. 3. 14. 00:37
import java.util.*;

Array

Arrays.sort(array); // 오름차순 정렬
Arrays.sort(array, Collections.reverseOrder()); // 내림차순 정렬 - primitive type은 불가능
Arrays.sort(array, customComparator); // 커스텀 정렬

List

Collections.sort(list); // 오름차순 정렬
list.sort(Collections.reverseOrder()); // 내림차순 정렬
list.sort(customComparator); // 커스텀 정렬

Comparator

첫번째 인자가 두번째 인자보다

  • 작으면 음수: first < second -> first - second < 0
  • 같으면 0: first = second -> first - second = 0
  • 크면 양수: first > second -> first - second > 0
list.sort(new Comparator<List<Integer>>() {
    @Override
    public int compare(List<Integer> o1, List<Integer> o2) {
    	int result = o1.get(1) - o2.get(1);
        
        if (result == 0) {
        	result = o1.get(0) - o1.get(0);
        }
        
        return result;
    }
});

// 람다로 변경
list.sort((o1, o2) -> {
    int result = o1.get(1) - o2.get(1);
    if (result == 0) {
        result = o1.get(0) - o2.get(0);
    }
    return result;
});

// Comparator chain으로 변경
list.sort(Comparator
            .comparingInt((List<Integer> o) -> o.get(1))
            .thenComparingInt(o -> o.get(0))
);

기타

// key, value로 정렬해서 넣어주는 Map
Map<String, Integer> map = new TreeMap<>();
map.put("b", 1);
map.put("a", 2); // a가 b앞으로 저장됨

// 정렬해서 넣어주는 Set. 중복해서 저장할 수는 없음
Set<Integer> set = new TreeSet<>();
set.add(3);
set.add(3); // 중복을 허용하지 않기 때문에 저장되지 않음
set.add(1); // first() 호출시 1이 리턴됨