본문 바로가기

알고리즘

15.[JAVA] Arrays.sort / Collecions.sort

알고리즘을 공부하던 중

 

항상 직접 정렬을 구현해서 정렬을 해왔는데

 

그러다보니 시간적으로도 코드적으로도 좋지 못한 것 같아서

 

sort 메소드를 활용해보기로 하였다

 

[참고 블로그]

 

https://devlog-wjdrbs96.tistory.com/68

 

[JAVA] Array.sort 와 Collections.sort 의 차이

두개의 차이는 그냥 직관적으로도 정렬을 해주는 역할이고, Array.Sort는 배열을 정렬해주는 것이고 Collections.sort는 클래스의 객체를 정렬해주는 것이라고 생각이 든다. 파이썬에서는 sort가 있어서

devlog-wjdrbs96.tistory.com


1. Arrays.sort

 

간단하게 이야기하자면

 

배열을 정렬할 때 사용하는 메소드이다

 

 

[사용법]

 

- 오름 차순 -

int arr[] = {1,2,5,4,3};

Arrays.sort(arr);

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

 

위와 같이 arr 에 1 2 5 4 3 순서로 데이터를 넣어서 배열을

 

sort 를 통해서 정렬 하고 난 뒤 출력을 하면

 

1 2 3 4 5

 

순으로 정렬된 데이터가 출력된다

 

 

하지만 여기에는 문제가 있다

 

바로 정렬을 무조건 오름차순으로 해야한다는 것이다

 

그렇다면 내림차순으로 정렬을 할 수는 없을까??

 

당연히 가능하다

 

[사용법]

 

- 내림 차순-


Integer arr[] = {1,2,5,4,3};

Arrays.sort(arr, Collections.reverseOrder());

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

 

여기서 주목해야할 점은 int 배열을 int형이 아닌 객체형 Integer로 변환했다는 점이다

 

그렇다면 왜 그렇게 한 것일까??

 

그것은 바로 내림차순으로 정렬하기 위해서는 Collections를 사용해야하는데 Collections에는 객체 단위의 데이터만 들어갈 수 있기 때문이다

 

그렇다면 왜 갑자기 Collections를 사용하게 된 것일까??

 

그 이유는 reverseOrder라는 내림차순 정렬 메소드 때문인데

 

해당 메소드는 Comparator 인터페이스를 기반으로한다

 

원래 Comparator를 사용한 내림차순 코드를 보도록 하자

 

Integer[] arr = {1, 26, 17, 25, 99, 44, 303};

Arrays.sort(arr, new Comparator<Integer>() {
    @Override
    public int compare(Integer i1, Integer i2) {
        return i2 - i1;
    }
});

System.out.println("Sorted arr[] : " + Arrays.toString(arr));

 

람다식 선언

 

Arrays.sort(arr, (i1, i2) -> i2 - i1);

 

이런 형태의 코드를 내림차순은 자주사용하는 메소드이기에 기본으로 지원을 해준다

 

또한 부분 정렬도 가능한데

 

Arrays.sort(arr, 0,3);

 

위의 형태로 배열 0 번에서 3번까지만 정렬하겠다는 부분정렬도 가능하다

 

 

그리고 배열 복사에 대해서도 간략하게 다루자면

 

1-1) 배열 복사

파이썬에서도 copy() 라는 내장함수가 있는데 자바는 배열을 복사해주는 것이 없을까? 했지만 이것도 있다.

 

 

위와 같이 메소드 arraycopy() 를 이용하면 된다. 인자의 순서는 다음과 같다.

 

  1. 복사할 원본의 배열
  2. 복사할 원본 배열의 시작 첨자 위치
  3. 복사될 목적 배열
  4. 복사될 배열의 시작 첨자 위치
  5. 복사할 원소의 수

정렬과는 관계없지만 그냥 Arrays 에 관한 것이므로 알아두려한다.

 

 

 

라고 한다 참고하도록 하자

 

 


 

2. Collections.sort

 

Collecionts.sort는 List 타입의 데이터를 받아서 정렬할 때 사용할 수 있는 방식이다

 

[사용법]

 

- 오름 차순 - 

 

ArrayList<Integer> list = new ArrayList<>();

for(int i = 0; i < n; i++){
    list.add(Integer.parseInt(br.readLine()));
}

Collections.sort(list);

 

- 내림 차순 -

 

ArrayList<Integer> list = new ArrayList<>();

for(int i = 0; i < n; i++){
    list.add(Integer.parseInt(br.readLine()));
}

Collections.reverse(list);

 

오름 차순은 sort

내림 차순은 reverse

 

를 사용하면 쉽게 정렬 된 데이터를 받아 볼 수 있다

 

 

'알고리즘' 카테고리의 다른 글

18. [JAVA] 투 포인터, 슬라이딩 윈도우  (0) 2022.08.24
17. [JAVA] 스택 과 큐(Stack / Queue)  (0) 2022.08.24
16. [JAVA] Comparable  (0) 2022.08.17
14. [JAVA] ValueOf, contains  (0) 2022.08.15
12. 알고리즘[Algorithm] 정리  (0) 2022.08.02