Java

Java, 정렬(CompareTo, Compartor)

greenyellow-s 2024. 8. 2. 14:11
정렬, 배열이나 리스트를 정렬하는 방법

 

java.util.Arrays클래스의 sort() 메서드를 사용

 

오름차순이 기본타입이다.


숫자 - 오름차순
int arr[] = {4,8,15,2,3,19,12};
Arrays.sort(arr);

for(int i : arr){
	System.out.print(i + " ");
}

//실행결과
//2 3 4 8 12 15 19

 

String 문자열 - 오름차순
int arr[] = {"apple","orange","banana","pear","peach","melone"};
Arrays.sort(arr);

for(int i : arr){
	System.out.print(i + " ");
}

//실행결과
//apple banana melon orange peach pear

 

내림차순
int arr[] = {"apple","orange","banana","pear","peach","melone"};
Arrays.sort(arr,Collections.reverseOrder());

for(int i : arr){
	System.out.print(i + " ");
}

//실행결과
// pear peach orange melon banana apple

 


CompareTo()

 

두개의 값을 비교하여 int 값으로 반환해주는 함수

 

숫자비교 -> 크다(1), 같다(0), 작다(-1)

문자열비교 -> 같다(0), 

숫자비교(나이 기준 - 오름차순)
public class PersonDTO extends Object implements Comparable<PersonDTO> { //모든 클래스 안에는 [extends object]가 생략되어 있는 것
	private String name;
	private int age;
    
@Override
	public int compareTo(PersonDTO p) {
		// 나이로 오름차순
		if(this.age < p.age) return -1; //-1 -> 두개의 비교값중 왼쪽이 더 크다
		else if(this.age > p.age) return 1;
		else return 0;
	}

 

나이 기준 - 내림차순
// 나이로 내림차순
if(this.age < p.age) return 1;
else if(this.age > p.age) return -1; //-1 -> 두개의 비교값 중 왼쪽
else return 0;

 

  • 기준 값과 비교대상이 동일한 값일 경우 0
  • 기준 값이 비교대상보다 작은 경우 -1
  • 기준 값이 비교대상 보다 큰 경우 1

문자열 비교 (이름 기준 오름 / 내림 차순)
//이름으로 오름차순 -- 문자열은 크다 작다 비교 안됨.
//ComareTo가 자체적으로 있음
return this.name.compareTo(p.name);
// 내림차순
return this.name.compareTo(p.name) * 1;

 

 


 

Compartor

 

내가 정의한 정렬 기준에 대해서 배열과 List Collection을 정렬할 수 있다.

 

Comparator<클래스타입> 클래스명 = new Comparator<클래스타입>()

compare 메소드 오버라이드해서 사용한다.

클래스 타입 비교대상 2개를 지역변수 o1, o2로 선언하고 return값으로 음수, 0, 양수를 변환하면서 정렬한다.

이름 기준 - 오름차순
Collections.sort(list);

for(PersonDTO personDTO : list) {
    System.out.print(personDTO + "  ");
}

 

이름 기준 - 내림차순
Comparator<PersonDTO> com = new Comparator<PersonDTO>() {
    @Override
    public int compare(PersonDTO p1, PersonDTO p2) {
        return p1.getName().compareTo(p2.getName())* -1;
    }
};

Collections.sort(list, com);

for(PersonDTO personDTO : list) {
    System.out.print(personDTO + "  ");
}