CodeGym /행동 /JAVA 25 SELF /클래스 Arrays: sort, fill, copyOf, equals

클래스 Arrays: sort, fill, copyOf, equals

JAVA 25 SELF
레벨 7, 레슨 5
사용 가능

1. 소개

Java의 배열은 강력한 도구지만 기본 문법만으로는 금방 반복 작업에 부딪힙니다. 이를 도와주는 것이 java.util.Arrays — 배열 작업을 위한 정렬, 복사, 비교, 서식화된 출력 등 다양한 정적 메서드 모음입니다. 인스턴스를 만들 필요가 없습니다 — 모든 메서드는 정적이며 클래스 이름으로 호출합니다.

메서드를 사용하려면 파일 맨 위에 import를 추가하세요:

import java.util.Arrays;

import를 잊으면 컴파일러가 Arrays를 “찾을 수 없음”이라고 보고합니다 — 버그가 아니라 import가 없는 상태에서의 정상 동작입니다.

2. 배열 정렬: Arrays.sort

Arrays.sort는 어떻게 동작하나

문법


Arrays.sort(massiv);
Arrays.sort(massiv, nachal’nyyIndeks, konechnyyIndeks);
전체 배열 또는 부분 범위 정렬

이 메서드는 “제자리에서” 정렬합니다 — 원본 배열을 변경하며 새 배열을 반환하지 않습니다. 원래 순서를 보존하고 싶다면 먼저 배열을 복사하세요.

예제: 정수 배열 정렬

int[] scores = {5, 2, 9, 1, 7};
Arrays.sort(scores); // 오름차순으로 정렬

System.out.println("정렬된 배열: " + Arrays.toString(scores));
// 출력: [1, 2, 5, 7, 9]

예제: 문자열 배열 정렬

String[] names = {"Vasya", "Petya", "Anya", "Igor"};
Arrays.sort(names);

System.out.println(Arrays.toString(names));
// [Anya, Igor, Petya, Vasya]

중요: 문자열은 사전식(lexicographic)으로, 숫자는 오름차순으로 정렬됩니다.

배열의 일부만 정렬

int[] arr = {7, 5, 3, 1, 9, 8};
Arrays.sort(arr, 1, 4); // 인덱스 1부터 3까지 포함해서 정렬합니다(4는 포함되지 않음)

System.out.println(Arrays.toString(arr));
// [7, 1, 3, 5, 9, 8]

특징

  • 제자리 정렬: 원본 배열이 바뀝니다.
  • 숫자는 오름차순, 문자열은 알파벳(사전식) 순서.
  • 복잡한 객체는 Comparator를 받는 오버로드를 사용하세요.

3. 배열 채우기: Arrays.fill

문법


Arrays.fill(massiv, znachenie);
Arrays.fill(massiv, nachal’nyyIndeks, konechnyyIndeks, znachenie);
전체 또는 일부 범위를 하나의 값으로 채우기

이 메서드는 전체 또는 지정된 부분을 동일한 값으로 채웁니다.

int[] marks = new int[5];
Arrays.fill(marks, 3); // 모든 요소가 이제 3
System.out.println(Arrays.toString(marks)); // [3, 3, 3, 3, 3]

배열의 일부 채우기

int[] arr = new int[10];
Arrays.fill(arr, 2, 5, 7); // 인덱스 2부터 4까지 채웁니다(5는 포함되지 않음)
System.out.println(Arrays.toString(arr));
// [0, 0, 7, 7, 7, 0, 0, 0, 0, 0]

문자열 배열 채우기

String[] guests = new String[4];
Arrays.fill(guests, "비어 있음");
System.out.println(Arrays.toString(guests)); // [비어 있음, 비어 있음, 비어 있음, 비어 있음]

4. 배열 복사: Arrays.copyOf и Arrays.copyOfRange

Arrays.copyOf

문법


Arrays.copyOf(iskhodnyyMassiv, novayaDlina);
지정한 길이로 새 복사본 만들기

새 배열을 만들어 원본의 요소를 복사합니다. 새 길이가 원본보다 크면 ‘뒤쪽’은 기본값으로 채워집니다 (0 — int, 참조 타입은 null).

int[] original = {1, 2, 3};
int[] copy = Arrays.copyOf(original, 5);
System.out.println(Arrays.toString(copy)); // [1, 2, 3, 0, 0]

길이를 줄이기

int[] shortCopy = Arrays.copyOf(original, 2);
System.out.println(Arrays.toString(shortCopy)); // [1, 2]

Arrays.copyOfRange

문법


Arrays.copyOfRange(iskhodnyyMassiv, nachal’nyyIndeks, konechnyyIndeks);
부분 배열을 새 배열로 복사
int[] arr = {10, 20, 30, 40, 50};
int[] mid = Arrays.copyOfRange(arr, 1, 4); // 인덱스 1부터 3까지 복사
System.out.println(Arrays.toString(mid)); // [20, 30, 40]

5. 배열 비교: Arrays.equals и Arrays.deepEquals

Java에서는 배열을 ==로 비교하면 안 됩니다 — 이는 내용이 아니라 참조를 비교합니다:

int[] a = {1, 2, 3};
int[] b = {1, 2, 3};
System.out.println(a == b); // false!

내용은 어떻게 비교하나요?


Arrays.equals(massiv1, massiv2);
Arrays.deepEquals(matritsa1, matritsa2);
얕은 비교와 깊은 비교
System.out.println(Arrays.equals(a, b)); // true

1차원 배열에는 Arrays.equals, 2차원 이상에는 Arrays.deepEquals를 사용하세요.

예제: 2차원 배열 비교

int[][] matrix1 = {{1, 2}, {3, 4}};
int[][] matrix2 = {{1, 2}, {3, 4}};

System.out.println(Arrays.equals(matrix1, matrix2));     // false!
System.out.println(Arrays.deepEquals(matrix1, matrix2)); // true

6. 배열을 보기 좋게 출력하기: Arrays.toString и Arrays.deepToString

배열을 직접 출력하면 읽기 어려운 문자열이 나옵니다:

int[] arr = {1, 2, 3};
System.out.println(arr); // [I@7a81197d

문법


Arrays.toString(massiv);
Arrays.deepToString(matritsa);
1차원/다차원 배열을 서식 있게 출력
System.out.println(Arrays.toString(arr)); // [1, 2, 3]
int[][] matrix = {{1, 2}, {3, 4}};
System.out.println(Arrays.deepToString(matrix)); // [[1, 2], [3, 4]]

7. Arrays 클래스 사용 시 흔한 실수

오류 №1: 배열을 통해 비교하려 함 ==
배열은 객체이며, ==는 참조만 비교합니다. 값이 같아도 결과는 false가 됩니다. 1차원 배열에는 Arrays.equals, 다차원 배열에는 Arrays.deepEquals를 사용하세요.

오류 №2: 정렬이 배열을 “제자리에서” 바꾼다는 사실을 잊음
원래 순서가 필요하다면 먼저 Arrays.copyOf로 복사본을 만든 뒤, 그 복사본을 정렬하세요. 그렇지 않으면 원본의 순서를 잃습니다.

오류 №3: Arrays.fill과 Arrays.copyOfRange의 경계를 잘못 이해함
이 메서드들은 반개구간을 사용합니다: 오른쪽 인덱스는 포함되지 않습니다. 예를 들어, Arrays.fill(arr, 2, 5, 9)는 인덱스 2, 3, 4를 채우며, 인덱스 5의 요소는 건드리지 않습니다.

오류 №4: 배열을 그대로 출력하려 함
System.out.println(arr)을 호출하면 기술적 표현이 출력됩니다. 1차원 배열은 Arrays.toString, 다차원 배열은 Arrays.deepToString을 사용하세요.

오류 №5: 다차원 배열을 통해 비교 Arrays.equals
이 메서드는 최상위 수준(내부 배열에 대한 참조)만 비교합니다. 내용 비교에는 Arrays.deepEquals를 사용하세요.

1
과제
JAVA 25 SELF, 레벨 7, 레슨 5
잠금
달리기 결과 정렬 🏃‍♂️
달리기 결과 정렬 🏃‍♂️
1
과제
JAVA 25 SELF, 레벨 7, 레슨 5
잠금
빈 창고 슬롯 초기화 📦
빈 창고 슬롯 초기화 📦
1
과제
JAVA 25 SELF, 레벨 7, 레슨 5
잠금
기상 관측소의 중간 관측값 추출 ☀️
기상 관측소의 중간 관측값 추출 ☀️
1
과제
JAVA 25 SELF, 레벨 7, 레슨 5
잠금
비밀 액세스 코드 대조 🔐
비밀 액세스 코드 대조 🔐
1
설문조사/퀴즈
배열, 레벨 7, 레슨 5
사용 불가능
배열
배열 입문
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION