java - 정렬을 변경하는 방법(Comparble)

imjingu·2023년 9월 10일
0

개발공부

목록 보기
468/481

정렬을 변경하는 방법.

  1. Comparable 인터페이스 구현
    정렬을 구현하는 데 사용하는 인터페이스이고 compareTo() 메서드를 구현해야 함.
    첫 번째 매개변수가 더 클때 양수를 반환하여 오름차순으로 정렬.

a.compareTo(b) :
현재 객체 < 파라미터로 넘어온 객체: 음수 리턴
현재 객체 == 파라미터로 넘어온 객체: 0 리턴
현재 객체 > 파라미터로 넘어온 객체: 양수 리턴
음수 또는 0이면 객체의 자리가 그대로 유지되며, 양수인 경우에는 두 객체의 자리가 바뀐다.

  1. Comparator 인터페이스 구현
    정렬을 구현하는 데 사용하는 인터페이스이고 compare() 메서드를 구현해야 함.
    compareTo() 메서드는 this와 전달된 매개변수를 비교하였다면, compare() 메서드는 전달되는 두 매개변수를 비교.
    compare() 메서드에는 매개변수가 2개 전달.

compare(a, b)
첫 번째 파라미터로 넘어온 객체 < 두 번째 파라미터로 넘어온 객체: 음수 리턴
첫 번째 파라미터로 넘어온 객체 == 두 번째 파라미터로 넘어온 객체: 0 리턴
첫 번째 파라미터로 넘어온 객체 > 두 번째 파라미터로 넘어온 객체: 양수 리턴
음수 또는 0이면 객체의 자리가 그대로 유지되며, 양수인 경우에는 두 객체의 자리가 변경된다.

일반적으로 Comparator 인터페이스 보다는 Comparable 인터페이스를 더 많이 사용.
다만 어떤 클래스가 이미 Comparable 인터페이스를 구현한 경우에 이 클래스의 정렬 방식을 정의할 때 Comparator 인터페이스를 사용.
String 클래스가 Comparable 인터페이스를 구현했고, compareTo() 메서드는 오름차순을 구현.

package chapter20230907;
import java.util.*;

class Student implements Comparable<Student> { // Comparable Student타입으로 구현함
	int num;
	String name;
	
	public Student(int num, String name) {
		this.num = num;
		this.name = name;
	}

	@Override
	public String toString() {
		return name;
	}

	@Override
	public int compareTo(Student student) { // compareTo 메서드 구현
		return (this.num - student.num) * -1; 
	}
	/*
	 처음 this.num 에는 아무것도 없으므로 0 그리고 student.num에 new Student(2, "김철수") 를 넣음
	 (0 - 2) * -1 = 2
	 그 다음 (2 - 3) * -1 = 1 -> 이철수 , 김철수
	 그 다음 (3 - 1) * -1 = -2 -> 이철수 보다 작음
	 그 다음 (2 - 1) * -1 = -1 -> 김철수 보다 작음
	 그래서 이철수 김철수 박철수
	 양수는 오름차순 정렬 음수는 내림차순 정렬
	 */
	
}
public class test02 {
	public static void main(String[] args) {
		Student[] array = {
				new Student(2, "김철수"),
				new Student(3, "이철수"),
				new Student(1, "박철수")
		};
		List<Student> list = Arrays.asList(array);
		Collections.sort(list);
		System.out.println(list);
	}
}

0개의 댓글