2 분 소요

1. ArrayList 정렬

  • Collections 클래스의 sort() 메서드 사용

    • 데이터와 관련된 작업을 도와주는 클래스이며, 내부 메서드는 static 메서드임.
    • sort()메서드 내부에 리스트타입을 매개변수로 전달하면 정렬을 해줌.
ArrayList<String> arr = new ArrayList<>();
arr.add("B");
arr.add("D");
arr.add("A");
arr.add("C");
arr.add("D");
for(String item : arr) {
    System.out.print(item + " "); // B D A C D
}

1) Collections 클래스의 sort 메서드 사용
Collections.sort(arr); // A B C D D
  • sort() 메서드 사용

2) sort 메서드 사용
arr.sort(Comparator.naturalOrder()); // A B C D D
arr.sort(Comparator.reverseOrder()); // D D C B A

2. 배열(primary type) 정렬

  • Arrays 클래스의 sort() 메서드

int[] arr = {1, 2, 5, 3, 9, 8, 6, 4, 7};

Arrays.sort(arr);

System.out.println(Arrays.toString(arr)); // 1, 2, 3, 4, 5, 6, 7, 8, 9

3. 사용자 정렬

  • Comparable 인터페이스

    • 반드시 compareTo 메서드 오버라이드!!
    • compareTo가 리턴하는 값: 양수 / 0 / 음수
      • 양수: 현재(this) 객체가 추가되는 객체(s)보다 크면 양수
      • 0 : 같으면 0 –> 같은 경우 입력순서대로 정렬되는 이슈가 있음!!
      • 음수: 현재(this) 객체가 추가되는 객체(s)보다 작으면 음수
public class Student implements Comparable<Student> {
    private int no;
    private String name;
    
    public Student(int no, String name) {
        this.no = no;
        this.name = name;
    }
    
    @Override
    // 출력을 위해 오버라이드 한 부분, 필수 아님
    public String toString() {
        return no + ": " + name;
    }
    
    @Override
    // Comparable 인터페이스 상속 시 '반드시' 오버라이드 해야하는 부분
    // 무엇을 기준으로 정렬을 하게 될 것인지를 사용자가 특정해주는 부분
    public int compareTo(Student s) {
        return this.no - s.no;
    }
    // 해당 메서드는 오름차순 정렬이며, this와 s 순서가 바뀌면 내림차순    
    
    public static void main(String[] args) {
        
        ArrayList<Student> st = new ArrayList<>();
        
        st.add(new Student(2, "김철수"));
        st.add(new Student(1, "윤경범"));
        st.add(new Student(4, "이나연"));
        st.add(new Student(3, "박영지"));
        방법 1) Collections 클래스 사용 
        Collections.sort(st);
        방법 2)
        st.sort(Comparator.naturalOrder()); // 오름차순
        st.sort(Comparator.reverseOrder()); // 내림차순도 가능
        
        for(Student s : st) {
            System.out.println(s);
        }  
    }
}

###

  • Collections.sort() 메서드 안 매개변수로 정렬기준 제시

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class test7 {
    static class Human{
        String name;
        int old;
        Human() {};
        Human(String name, int old) {
            this.name = name;
            this.old = old;
        }
    }
    
    public static void main(String[] args) {
        ArrayList<Human> arr = new ArrayList<>();
        arr.add(new Human("홍길동", 15));
        arr.add(new Human("김철수", 40));
        arr.add(new Human("토레스", 35));
        arr.add(new Human("박영희", 35));
        
        System.out.println("=== 정렬전 출력 ===");
        for (Human item : arr) {
            System.out.println("이름: " + item.name + "  나이: " + item.old);
        }
        System.out.println();
        
        === 정렬전 출력 ===
        이름: 홍길동  나이: 15
        이름: 김철수  나이: 40
        이름: 토레스  나이: 35
        이름: 박영희  나이: 35

        System.out.println("=== 나이순 정렬 ===");
        Collections.sort(arr, (x1, x2) -> x1.old - x2.old);
        for (Human item : arr) {
            System.out.println("이름: " + item.name + "  나이: " + item.old);
        }
        System.out.println();
        
        === 나이순 정렬 ===
        이름: 홍길동  나이: 15
        이름: 토레스  나이: 35
        이름: 박영희  나이: 35
        이름: 김철수  나이: 40

        // String 타입 정렬할 때 방법
        System.out.println("=== 이름순 정렬 ===");
        Collections.sort(arr, (x1, x2) -> x1.name.compareTo(x2.name));
        for (Human item : arr) {
            System.out.println("이름: " + item.name + "  나이: " + item.old);
        }
        System.out.println();
        
        === 이름순 정렬 ===
        이름: 김철수  나이: 40
        이름: 박영희  나이: 35
        이름: 토레스  나이: 35
        이름: 홍길동  나이: 15
    }
}

참고 1: 우선순위큐에서 오름차순, 내림차순 정렬 예시

참고 2: 정렬 관련 문제

참고 3: 정렬 관련 블로그 게시물


마지막 수정일시: 2022-06-30 16:23

카테고리:

업데이트:

댓글남기기