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();
}
}
'CS > 자바' 카테고리의 다른 글
자바 #5 - 생성자와 접근 지정자 (1) | 2024.02.09 |
---|---|
자바 #4 - 객체지향 언어의 특징 (0) | 2024.02.07 |
자바 #3 - 자바의 배열과 예외 처리 (1) | 2024.02.04 |
자바#2 - 자바의 데이터 타입과 입력 (1) | 2024.02.04 |
자바#1 - JAVA의 시작 (JAVA의 태동과 특징) (0) | 2024.02.03 |