알고리즘을 공부하던 중
항상 직접 정렬을 구현해서 정렬을 해왔는데
그러다보니 시간적으로도 코드적으로도 좋지 못한 것 같아서
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() 를 이용하면 된다. 인자의 순서는 다음과 같다.
- 복사할 원본의 배열
- 복사할 원본 배열의 시작 첨자 위치
- 복사될 목적 배열
- 복사될 배열의 시작 첨자 위치
- 복사할 원소의 수
정렬과는 관계없지만 그냥 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 |