728x90
- 두 인터페이스 모두 public 접근 변경자로 선언하기 때문에 모든 용도로 자료를 담을 수 있다.
- Comparable 인터페이스는 자연스러운 순서로 정렬할 때 사용하고, Comparator 는 원하는 대로 정렬 순서를 지정하고 싶은 곳에 사용한다.
- 배열을 정렬할 때는 일반적으로 Array나 Collectio 클래스에 내장된 라이브러리를 이용한다.
- Array와 Collection 클래스는 몇 가지 오버로딩된 정렬 메서드가 있다.크게 배열을 매개변수로 받는 메서드와 배열을 Comparator 객체를 매개변수로 받는 서드의 두 가지로 분류된다. 그리고 각각의 원시타입 과 참조타입에 관한 객체를 오버로드 한다.
- Comparator 객체가 없는 구현체는 타입을 자연스런 순서로 정렬한다.
@Test
void sortInts() {
final int[] numbers = {-3, -5, 1, 7, 4, -2};
final int[] expected = {-5, -3, -2, 1, 4, 7};
Arrays.sort(numbers);
assertThat(numbers).isEqualTo(expected);
}
@Test
void sortObjects() {
final String[] strings = {"z", "x", "y", "abc", "zzz", "zazzy"};
final String[] expected = {"abc", "x", "y", "z", "zazzy", "zzz"};
Arrays.sort(strings);
assertThat(strings).isEqualTo(expected);
}
- 지정한 순서대로 정렬하고 싶으면 sort 메서드에서 사용할 Comparator 인터페이스를 구현한 후 이를 sort 메서드에 제공해야 한다.
- 이를 위해 Comparator 인터페이스에는 자료형 T 를 구현하는 int compare(T o1, T o2)와 boolean equals (Object o) 라는 두 가지 메서드가 있다.
- Compare 메서드는 양수, 0, 음수라는 세 가지 상태 중 하나로 int 타입의 값을 반환한다.
- 두 번째 매개변수 앞에 첫 번째 매개변수가 오면 음수 값, 두 개의 매새변수가 같으면 0, 두 번째 매개변수가 첫 번째 매개변수보다 앞에 오면 양수 값을 반환한다.
- 아래는 Comparator 인터페이스를 사용해 역순으로 정렬한 코드
@Test
void customSorting() {
final List<Integer> numbers = Arrays.asList(4, 7, 1, 6, 3, 5, 4);
final List<Integer> expected = Arrays.asList(7, 6, 5, 4, 4, 3, 1);
Collections.sort(numbers, new ReverseNumericalOrder());
assertThat(numbers).isEqualTo(expected);
}
public class ReverseNumericalOrder implements Comparator<Integer> {
@Override
public int compare(Integer o1, Integer o2) {
return o2 - o1;
}
}
728x90
'Language > 자바' 카테고리의 다른 글
메서드 변수에 사용하는 static 키워드 (0) | 2023.02.14 |
---|---|
final 키워드는 객체 참조에 어떤 영향을 미치는가? (0) | 2023.02.14 |
JVM G1 GC 방식에 대해.. (0) | 2023.02.12 |
자바 가비지 콜렉터(GC)에 대한 정리. (0) | 2023.02.12 |
자바 if else 와 swtich case 를 비교해보았다.. (0) | 2023.02.11 |
댓글