관리 메뉴

MOMONOTE

배열의 정렬 (Arrays.sort , Comparator, compareTo , compare) 본문

알고리즘, 코딩테스트/자주나오는, 메서드 정리, 자료구조 등

배열의 정렬 (Arrays.sort , Comparator, compareTo , compare)

momo0503 2021. 2. 23. 16:31

배열을 오름차순으로 정렬하기 위해선 util.Arrays를 import하고 Arrays.sort(arr); 를 하면된다.

 

 

배열을 내림차순으로 정렬하기 위해 Collections.reverseOrder() 사용한다. 이때 배열은 원시타입을 사용하면 안된다.

Collections.reverseOrder() Comparator 객체입니다. Comparator는 직접 구현해야하지만, 내림차순은 자주 사용되기 때문에 Collections에서 기본으로 제공해준다.

import java.util.Arrays;
import java.util.Collections;

public class Test {

	public static void main(String[] args) {
		
		Integer[] arr = new Integer[5];
		arr[0] = 5;  arr[1] = 6; arr[2] = 2; arr[3] = 1; arr[4] = 3;
		
		Arrays.sort(arr,  Collections.reverseOrder());
		
		for(int i =0;i<5;i++) {
			System.out.println(arr[i]);
		}
	}

}

 

   

내림차순 직접 구현하기 

import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;

public class Test {

	public static void main(String[] args) {
		
		Integer[] arr = new Integer[5];
		arr[0] = 5;  arr[1] = 6; arr[2] = 2; arr[3] = 1; arr[4] = 3;
		
	   //내림차순 직접 구현하기 
		
		
		Arrays.sort(arr, new Comparator<Integer>(){
			
			@Override
			public int compare(Integer a, Integer b) {
				
				//return b-a; //이것도 가능 
				return b.compareTo(a);
			}
			
		});
		for(int i =0;i<5;i++) {
			System.out.println(arr[i]);
		}
	}

}

 

 

 

compare()

compare() 메서드 작성법
첫 번째 파라미터로 넘어온 객체 < 두 번째 파라미터로 넘어온 객체: 음의 정수 리턴
첫 번째 파라미터로 넘어온 객체 == 두 번째 파라미터로 넘어온 객체: 0 리턴
첫 번째 파라미터로 넘어온 객체 > 두 번째 파라미터로 넘어온 객체: 양의 정수 리턴
return 타입이 int 형이다.


음수 또는 0이면 객체의 자리가 그대로 유지되며, 양수인 경우에는 두 객체의 자리가 변경된다.

 

 

예를들어 { 2, 1, 3 } 이라는 배열이 있고, public int compare(int a1, int a2) { return a1 - a2 } 가 있다고 가정해보자.

 

그렇다면 맨 처음 a1 은 2 가 될테고, a2 는 1이 된다. 즉, 2 - 1 = 1 이므로 양수가 반환되기 때문에 a1 과 a2, 즉 2 와 1 의 위치가 서로 바뀌게 된다. 그러면 { 1, 2, 3 } 이 되겠다.

 

그 다음 a1, a2 는 각각 2 와 3이 될테고, 2 - 3 = -1 이므로 음수가 반환되어 두 객체 2와 3은 위치가 바뀌지 않는다. 

 

이렇게 compare 메소드는 3가지 반환값에 의해 두 객체(인자)의 위치를 바꾸거나 그대로 둔다.

 

compareTo()

compareTo() 함수에는 위에서 설명하는바와 같이 "문자열의 비교"  "숫자의 비교" 두 방식이 존재한다.

 

숫자의 비교 같은 경우는 단순히 크다(1), 같다(0), 작다(-1) 의 관한 결과값을 리턴해주는 반면

문자열의 비교 같은 경우는 같다(0), 그 외 양수/음수값 같이 참 재미난 결과를 반환해준다.

 

 


compareTo 에 상세 비교에 관한 내용 
출처: https://mine-it-record.tistory.com/133

 

[JAVA] 자바_compareTo ( 값 [문자열/숫자] 비교 )

-마지막 수정날짜 : 2021-01-01- 과거 기록한 글이나 보기 힘든 부분도 있고 잘못 작성된 부분이 있어 내용 일부분 수정하였습니다. (잘못된 내용이 있는부분 적어주시면 바로바로 수정하겠습니다.)

mine-it-record.tistory.com

출처 : st-lab.tistory.com/112

 

compare() 의 예시 설명 출처

 

[백준] 1181번 : 단어 정렬 - JAVA [자바]

www.acmicpc.net/problem/1181 1181번: 단어 정렬 첫째 줄에 단어의 개수 N이 주어진다. (1≤N≤20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문

st-lab.tistory.com

외 각종 책 및 공식 문서 정리하여 내가 알기 쉽게 정리.

 

 

 

Comments