본문 바로가기

학습 기록 (Learning Logs)/Today I Learned

정렬

  1. String[][] book_time;
  2.  Arrays.sort(book_time, Comparator.comparing(o -> o[0]));
  3.   Arrays.sort(book_time, (o1, o2) -> {
                if (o1[0].equals(o2[0])) {
                    return o1[1].compareTo(o2[1]);
                }
                return o1[0].compareTo(o2[0]);
            });

 

 

 


✅ 1. 단일 배열 (1차원)

🔹 기본형 배열 (int[], double[], char[] 등)

 

  • 기본형Comparator 쓸 수 없음 (기본 오름차순만 가능)
  • 내림차순 하고 싶다면 Integer[]로 박싱해야 함

 

 
int[] arr = {5, 2, 3};
Arrays.sort(arr); // 오름차순 정렬


Integer[] arr = {5, 2, 3};
Arrays.sort(arr, Collections.reverseOrder());// 내림차순

 

🔹 참조형 배열 (String[], Integer[], 커스텀 객체 등)

String[] words = {"banana", "apple", "cherry"};
Arrays.sort(words); // 알파벳 오름차순

//Comparator도 사용 가능:
Arrays.sort(words, Comparator.reverseOrder());
 

✅ 2. 이중 배열 (2차원 배열)

int[][] data = {
    {5, 2},
    {1, 3},
    {4, 1}
};

 

 

 

✅ 방법 1: Arrays.sort() + 람다

Arrays.sort(data, (a, b) -> Integer.compare(a[0], b[0]));


{1, 3}
{4, 1}
{5, 2}

 

  • a, b는 각각 int[] (행)
  • a[0], b[0]는 행의 첫 번째 요소 (정렬 기준)
  • 오름차순

 

✅ 방법 2: 두 번째 요소 기준 정렬 (예: 내림차순)

Arrays.sort(data, (a, b) -> Integer.compare(b[1], a[1]));

{1, 3}
{5, 2}
{4, 1}

 

 

  • 두 번째 요소(a[1]) 기준
  • 내림차순이므로 b - a 순서로 비교

 

✅ 복합 조건 정렬

Arrays.sort(data, (a, b) -> {
    if (a[0] != b[0]) return Integer.compare(a[0], b[0]);
    return Integer.compare(b[1], a[1]);
});

 

  • 첫 번째 요소 기준 오름차순
  • 같으면 두 번째 요소 기준 내림차순

 


✅ 3. List는 Arrays.sort() 못 씀!

List<Integer> list = Arrays.asList(5, 2, 3);
// Arrays.sort(list); ❌ 컴파일 오류!

Collections.sort(list); // ✅ 정렬 가능

list.sort(Comparator.naturalOrder());