차곡차곡 성 쌓기
article thumbnail

Arrays.sort()

  • 배열을 정렬하는데 사용  ('int [] ', 'String []' 등)
  • 기본 데이터 타입 배열, 객체 배열 모두에 사용 가능
  • 주어진 배열 직접 변경

 

Collections.sort()

  • 컬렉션을 정렬하는 데 사용('List', 'Set' 등)
  • 주어진 컬렉션을 직접 변경

둘 다 Comparable 인터페이스나 Comparator 인터페이스 중 하나를 구현하고 있어야 한다. 이 둘의 차이는 무엇일까? 알아본다.

 

 

 

Comparable 인터페이스

  • 객체가 자연스러운 순서를 갖도록 하는 것이 목표
  • 객체 자체가 비교 로직을 구현
  • `compareTo` 메소드 제공해야함
    • 메소드는 현재 객체가 다른 객체보다 작으먄 음수, 같은 0, 크면 양수를 반환해야 함
List<Person> people = new ArrayList<>();
// ... (people에 객체 추가)

Collections.sort(people); // Comparable을 사용하여 정렬



public class Person implements Comparable<Person> {
    private String name;
    private int age;

    // ... (생성자, 다른 메소드 등)

    @Override
    public int compareTo(Person otherPerson) {
        // 비교 로직을 구현하여 자연스러운 순서 정의
        return this.age - otherPerson.age;
    }
}

 

 

 

Comparator 인터페이스

  • 객체의 정렬 순서를 변경하거나 특정 비교 기준 제공하는 것이 목표
  • 외부에서 객체들의 정렬 순서를 제어하고자 할 때 사용
  • Comparator 인터페이스를 구현한 별도의 클래스를 생성하여 제공
  • compare 메소드를 구현 - 반환값에 따라 순서 결정
    • 반환 값이 양수이면 첫 번째 객체(`o1`)이 두 번째 객체(`o2`)보다 크다고 판단 
    • o1.value - o2.value => 오름차순 정렬
    • o2.value - o1.value => 내림차순 정렬
List<Person> people = new ArrayList<>();
// ... (people에 객체 추가)

AgeComparator ageComparator = new AgeComparator();
Collections.sort(people, ageComparator); // Comparator를 사용하여 정렬
Collections.sort(list, (o1, o2) -> o2.value - o1.value); // 내림차순 정렬


public class AgeComparator implements Comparator<Person> {
    @Override
    public int compare(Person person1, Person person2) {
        // 비교 로직을 구현하여 나이를 기준으로 정렬
        return person1.getAge() - person2.getAge();
    }
}
728x90
profile

차곡차곡 성 쌓기

@nagrang

포스팅이 좋았다면 "좋아요" 해주세요!