-
[JAVA] 배열 정렬하기 : 오름차순, 내림차순Java/Collection(컬렉션) 2024. 9. 17. 16:52반응형
목차
자바에서는 배열을 정렬하는 다양한 방법이 있습니다. 이번 문서에서는 Arrays.sort, Arrays.parallelSort 메서드 등을 사용하여 배열을 오름차순 및 내림차순으로 정렬하는 방법을 기본과 병렬 방식으로 구분하여 설명하겠습니다.
1. 정수 배열을 오름차순 정렬
Arrays.sort 메서드를 사용하여 정수 배열을 오름차순으로 정렬합니다.
/** * Arrays.sort 메소드를 사용하여 배열을 오름차순으로 정렬 * * @param arr 정렬할 배열 * @return 정렬된 배열 */ public int[] arraySortAscending(int[] arr) { Arrays.sort(arr); return arr; }
단위 테스트
@Order(1) @DisplayName("arraySortAscending: 정수 배열을 오름차순으로 정렬") @Test void testArraySortAscendingForIntArray() { // given int[] arr = {5, 3, 8, 1, 9}; // when int[] result = arraySort.arraySortAscending(arr); // then int[] expected = {1, 3, 5, 8, 9}; assertArrayEquals(expected, result); }
2. 정수 배열을 내림차순 정렬
Arrays.sort와 Comparator.reverseOrder를 사용하여 정수 배열을 내림차순으로 정렬합니다.
/** * Arrays.sort 메소드를 사용하여 배열을 내림차순으로 정렬 * * @param arr 정렬할 배열 * @return 정렬된 배열 */ public int[] arraySortDescending(int[] arr) { // 원시형 배열을 래퍼 클래스 배열로 변환 Integer[] boxedArr = Arrays.stream(arr) .boxed() .toArray(Integer[]::new); // 내림차순 정렬 Arrays.sort(boxedArr, Comparator.reverseOrder()); // 래퍼 클래스 배열을 원시형 배열로 변환 return Arrays.stream(boxedArr) .mapToInt(Integer::intValue) .toArray(); }
단위 테스트
@Order(2) @DisplayName("arraySortDescending: 정수 배열을 내림차순으로 정렬") @Test void testArraySortDescendingForIntArray() { // given int[] arr = {5, 3, 8, 1, 9}; // when int[] result = arraySort.arraySortDescending(arr); // then int[] expected = {9, 8, 5, 3, 1}; assertArrayEquals(expected, result); }
3. 정수 배열을 병렬로 오름차순 정렬
Arrays.parallelSort 메서드를 사용하여 정수 배열을 병렬로 오름차순 정렬합니다.
/** * Arrays.parallelSort 메소드를 사용하여 배열을 병렬로 오름차순 정렬 * * @param arr 정렬할 배열 * @return 정렬된 배열 */ public int[] parallelSortAscending(int[] arr) { Arrays.parallelSort(arr); return arr; }
단위 테스트
@Order(3) @DisplayName("parallelSortAscending: 정수 배열을 병렬로 오름차순 정렬") @Test void testParallelSortAscendingForIntArray() { // given int[] arr = {5, 3, 8, 1, 9}; // when int[] result = arraySort.parallelSortAscending(arr); // then int[] expected = {1, 3, 5, 8, 9}; assertArrayEquals(expected, result); }
4. 정수 배열을 병렬로 내림차순 정렬
Arrays.parallelSort와 Comparator.reverseOrder를 사용하여 정수 배열을 병렬로 내림차순 정렬합니다.
/** * Arrays.parallelSort 메소드를 사용하여 배열을 병렬로 내림차순 정렬 * * @param arr 정렬할 배열 * @return 정렬된 배열 */ public int[] parallelSortDescending(int[] arr) { // 원시형 배열을 래퍼 클래스 배열로 변환 Integer[] boxedArr = Arrays.stream(arr) .boxed() .toArray(Integer[]::new); // 내림차순 정렬 Arrays.parallelSort(boxedArr, Comparator.reverseOrder()); // 래퍼 클래스 배열을 원시형 배열로 변환 return Arrays.stream(boxedArr) .mapToInt(Integer::intValue) .toArray(); }
단위 테스트
@Order(4) @DisplayName("parallelSortDescending: 정수 배열을 병렬로 내림차순 정렬") @Test void testParallelSortDescendingForIntArray() { // given int[] arr = {5, 3, 8, 1, 9}; // when int[] result = arraySort.parallelSortDescending(arr); // then int[] expected = {9, 8, 5, 3, 1}; assertArrayEquals(expected, result); }
5. 문자열 배열을 오름차순 정렬
Arrays.sort 메서드를 사용하여 문자열 배열을 오름차순으로 정렬합니다.
/** * Arrays.sort 메소드를 사용하여 문자열 배열을 오름차순으로 정렬 * * @param arr 정렬할 배열 * @return 정렬된 배열 */ public String[] arraySortAscending(String[] arr) { Arrays.sort(arr); return arr; }
단위 테스트
@Order(5) @DisplayName("arraySortAscending: 문자열 배열을 오름차순으로 정렬") @Test void testArraySortAscendingForStringArray() { // given String[] arr = {"Java", "Python", "C++", "JavaScript", "Ruby"}; // when String[] result = arraySort.arraySortAscending(arr); // then String[] expected = {"C++", "Java", "JavaScript", "Python", "Ruby"}; assertArrayEquals(expected, result); }
6. 문자열 배열을 내림차순 정렬
Arrays.sort와 Comparator.reverseOrder를 사용하여 문자열 배열을 내림차순으로 정렬합니다.
/** * Arrays.sort 메소드를 사용하여 문자열 배열을 내림차순으로 정렬 * * @param arr 정렬할 배열 * @return 정렬된 배열 */ public String[] arraySortDescending(String[] arr) { Arrays.sort(arr, Comparator.reverseOrder()); return arr; }
단위 테스트
@Order(6) @DisplayName("arraySortDescending: 문자열 배열을 내림차순으로 정렬") @Test void testArraySortDescendingForStringArray() { // given String[] arr = {"Java", "Python", "C++", "JavaScript", "Ruby"}; // when String[] result = arraySort.arraySortDescending(arr); // then String[] expected = {"Ruby", "Python", "JavaScript", "Java", "C++"}; assertArrayEquals(expected, result); }
7. 문자열 배열을 병렬로 오름차순 정렬
Arrays.parallelSort 메서드를 사용하여 문자열 배열을 병렬로 오름차순 정렬합니다.
/** * Arrays.parallelSort 메소드를 사용하여 문자열 배열을 병렬로 오름차순 정렬 * * @param arr 정렬할 배열 * @return 정렬된 배열 */ public String[] parallelSortAscending(String[] arr) { Arrays.parallelSort(arr); return arr; }
단위 테스트
@Order(7) @DisplayName("parallelSortAscending: 문자열 배열을 병렬로 오름차순 정렬") @Test void testParallelSortAscendingForStringArray() { // given String[] arr = {"Java", "Python", "C++", "JavaScript", "Ruby"}; // when String[] result = arraySort.parallelSortAscending(arr); // then String[] expected = {"C++", "Java", "JavaScript", "Python", "Ruby"}; assertArrayEquals(expected, result); }
8. 문자열 배열을 병렬로 내림차순 정렬
Arrays.parallelSort와 Comparator.reverseOrder를 사용하여 문자열 배열을 병렬로 내림차순 정렬합니다.
/** * Arrays.parallelSort 메소드를 사용하여 문자열 배열을 병렬로 내림차순 정렬 * * @param arr 정렬할 배열 * @return 정렬된 배열 */ public String[] parallelSortDescending(String[] arr) { Arrays.parallelSort(arr, Comparator.reverseOrder()); return arr; }
단위 테스트
@Order(8) @DisplayName("parallelSortDescending: 문자열 배열을 병렬로 내림차순으로 정렬") @Test void testParallelSortDescendingForStringArray() { // given String[] arr = {"Java", "Python", "C++", "JavaScript", "Ruby"}; // when String[] result = arraySort.parallelSortDescending(arr); // then String[] expected = {"Ruby", "Python", "JavaScript", "Java", "C++"}; assertArrayEquals(expected, result); }
장단점
장점
- 간단함: Arrays.sort 메서드는 매우 직관적이고 이해하기 쉽습니다.
- 성능: Arrays.parallelSort는 병렬 처리를 통해 대용량 데이터에서 성능을 향상시킬 수 있습니다.
단점
- 복잡성: 병렬 정렬(특히 내림차순 정렬)은 코드가 더 복잡해질 수 있습니다.
- 오버헤드: 병렬 처리는 특정 상황에서 성능 오버헤드를 초래할 수 있습니다.
결론결론적으로, 자바에서 배열을 정렬하는 방법은 Arrays.sort와 Arrays.parallelSort 메서드를 통해 용이하게 구현할 수 있습니다.
소스 코드는 Github Repository- https://github.com/tychejin1218/blog/tree/main/java-collection 프로젝트를 참조하세요.
반응형'Java > Collection(컬렉션)' 카테고리의 다른 글
[JAVA] 배열의 합 구하기 (1) 2024.09.17 [JAVA] 배열 검색하기 (0) 2024.09.17 [Java] 배열(Array)을 리스트(List)로 변환 - 반복문, Arrays, Collection, Stream (0) 2023.05.06 [Java] List 중복 제거 (HashSet, TreeSet, Stream) (0) 2019.12.16 [Java] Map 전체 출력(entrySet, keySet, Iterator, Lambda, Stream) (0) 2018.12.27