Algorithm

특정 규칙에 의한 배열 정렬 Arrays.sort Comparator

Gyuri 2022. 7. 14. 17:45

Arrays.sort() 메소드 안에서 두 객체를 비교해 위치를 바꿀지 말지 판단해 정렬한다.

Comparator는 객체를 비교할 수 있도록 해주는 인터페이스로, 특정 규칙에 의해 비교하고 싶은 경우에 구현해 사용한다.

 

String[] arr = new String[N];	// 배열에 단어가 이미 초기화 되었다고 가정
 
Arrays.sort(arr, new Comparator<String>() {		
	@Override
	public int compare(String s1, String s2) {
		/*
		  정렬방법 구현
		*/
	}
});

이렇게 Comparator의 타입을 String으로 넣었다.

그 후, compare 메소드를 오버라이딩 한다! 

 

compare메소드 리턴 타입이 int형인 이유는 compare메소드는 3가지 리턴 값에 의해 위치를 바꿀 지 말 지 결정한다.

- 양의 정수

- 0

- 음의 정수

 

기본적으로 양수일 경우 Arrays.sort()에서 정렬 알고리즘에  의해 위치를 바꾸고,

0이나 음수일 경우 두 객체의 위치는 바뀌지 않는다!

 

예로, { 2, 1, 3 }이란 배열이 있고,

public int compare(int a1, int a2) { return a1-a2 }가 있다고 가정해보자.

 

처음엔

a1=2 / a2=1 => 즉, 2-1 = 1 이므로 2와 1의 위치를 바꾼다

즉, { 1, 2, 3 } 이 된다.

 

두 번째는

a1=2 / a2=3 => 즉, 2-3 = -1이므로 위치를 바꾸지 않는다!