배열->문자열
| 리턴 타입 | 메소드 | 내용 |
|---|---|---|
| String | toString(배열) | 배열을 "[값1, 값2...]"와 같은 문자열로 리턴 |
사용 예시
String[] arr = {"h", "e", "l", "l", "o", "!"};
System.out.println(Arrays.toString(arr));
// [h, e, l, l, o, !]
배열 복사
| 리턴 타입 | 메소드 | 내용 |
|---|---|---|
| 타겟 배열 | copyOf(원본 배열, 복사할 길이) | 원본 배열의 0번 인덱스에서 복사할 길이 만큼 복사한 배열 리턴, 복사할 길이는 원본 배열보다 커도 되고, 타겟 배열의 길이가 됨 |
| 타겟 배열 | copyOfRange(원본 배열, 시작 인덱스, 큰 인덱스) | 원본 배열의 시작 인덱스에서 끝 인덱스-1 까지 복사한 배열 리턴 |
사용 예시(1)
String[] arr1 = {"h", "e", "l", "l", "o", "!"};
// arr1.length만큼 arr1을 arr2로 복사
String[] arr2 = Arrays.copyOf(arr1, arr1.length);
System.out.println(Arrays.toString(arr2));
// [h, e, l, l, o, !]
사용 예시(2)
String[] arr1 = {"h", "e", "l", "l", "o", "!"};
// arr1[1] ~ arr1[4]를 arr3[0] ~ arr3[3]로 복사
Stirng[] arr3 = Arrays.copyOfRange(arr1, 1, 5);
System.out.println(Arrays.toString(arr3));
// [e, l, l, o]
(+) 추가로 알아두면 좋을 메서드
System.arraycopy()
System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
원본 배열 == 복사할 배열
타겟 배열 == 복사한 배열
| 매개값 | 내용 |
|---|---|
| Object src | 원본 배열 |
| int srcPos | 원본 배열 시작 인덱스 복사할 항목의 시작 위치 |
| Object dest | 타겟 배열 |
| int destPos | 타겟 배열 시작 인덱스 타겟 배열에서의 복사 시작 위치 |
| int length | 복사 길이 원본 배열 시작 인덱스에서 몇 개의 항목을 복사할 것인지 |
사용 예시(1)
String[] arr1 = {"h", "e", "l", "l", "o", "!"};
String[] arr2 = new String[arr1.length];
System.arraycopy(arr1, 1, arr2, 3, 2);
System.out.println(Arrays.toString(arr2));
// [null, null, null, e, l, null]

사용 예시(2)
String[] arr1 = {"h", "e", "l", "l", "o", "!"};
String[] arr3 = new String[arr1.length];
// arr1 전체를 arr4로 복사
System.arraycopy(arr1, 0, arr3, 0, arr1.length);
System.out.println(Arrays.toString(arr3));
// [h, e, l, l, o, !]
배열 비교
| 리턴 타입 | 메소드 | 내용 |
|---|---|---|
| boolean | equals(배열1, 배열2) | 두 배열의 얕은 비교 중첩 배열의 항목은 비교하지 않음, 1차 항목값만 비교 |
| boolean | deepEquals(배열1, 배열2) | 두 배열의 깊은 비교 중첩 배열의 항목까지 비교 |
equals(배열1, 배열2)
사용 예시(1)
int[] arr1 = { 1, 2, 3 };
int[] arr2 = { 1, 2, 3 };
System.out.println(Arrays.equals(arr1, arr2));
// true
deepEquals(배열1, 배열2)
사용 예시(2)
int[][] arr1 = { {1, 2},{3, 4} };
int[][] arr2 = { {1, 2},{3, 4} };
System.out.println(Arrays.equals(arr1, arr2));
// false
System.out.println(Arrays.deepEquals(arr1, arr2));
// true
(+) 추가로 알아두면 좋을 내용
얕은 복사 vs 깊은 복사
얕은 복사
데이터를 복사할때, 복사 객체는 원본 객체와 같은 메모리 주소를 참조
int a = 1;
int b = a;

사용 예시(1)
int[][] arr1 = { {1,2}, {3,4} };
// 얕은 복사
int[][] arr2 = Arrays.copyOf(arr1, arr1.length);
System.out.println(Arrays.equals(arr1, arr2));
// true
System.out.println(Arrays.deepEquals(arr1, arr2));
// true

깊은 복사
데이터를 복사할때, 복사 객체는 원본 객체와 인스턴스 변수까지 복사하여 새주소에 담음
사용 예시(2)
int[][] arr1 = { {1,2}, {3,4} };
// 깊은 복사
int[][] arr3 = Arrays.copyOf(arr1, arr1.length);
arr3[0] = Arrays.copyOf(arr1[0], arr1[0].length);
arr3[1] = Arrays.copyOf(arr1[1], arr1[1].length);
System.out.println(Arrays.equals(arr1, arr3));
// false
System.out.println(Arrays.deepEquals(arr1, arr3));
// true

배열 정렬
오름차순
| 리턴 타입 | 메소드 | 내용 |
|---|---|---|
| void | sort(배열) | 배열의 전체 항목을 오름차순으로 정렬 |
| void | sort(배열, int start, int end) | start부터 end-1까지 오름차순으로 정렬 |
사용 예시(1)
int [] arr1 = { 5, 3, 2, 1, 4 };
String [] arr2 = {"c", "d", "e", "b", "a"};
// sort 오름차순 정렬
Arrays.sort(arr1);
Arrays.sort(arr2);
System.out.println(Arrays.toString(arr1));
// [1, 2, 3, 4, 5]
System.out.println(Arrays.toString(arr2));
// [a, b, c, d, e]
사용 예시(2)
int [] arr1 = { 5, 3, 2, 1, 4 };
String [] arr2 = {"c", "d", "e", "b", "a"};
// sort 인덱싱 정렬
Arrays.sort(arr1, 2, 5);
Arrays.sort(arr2, 2, 5);
System.out.println(Arrays.toString(arr1));
// [5, 3, 1, 2, 4]
System.out.println(Arrays.toString(arr2));
// [c, d, a, b, e]
내림차순
| 리턴 타입 | 메소드 | 내용 |
|---|---|---|
| void | sort(배열, Collections.reverseOrder()) | 배열의 전체 항목을 내림차순으로 정렬 |
| void | sort(배열, Comparator.reverseOrder()) | `` |
| void | sort(배열, int start, int end, Collections.reverseOrder()) | start부터 end-1까지 내림차순으로 정렬 |
| void | sort(배열, int start, int end, Comparator.reverseOrder()) | `` |
사용 예시(1)
Integer[] arr1 = { 5, 3, 2, 1, 4 };
String [] arr2 = {"c", "d", "e", "b", "a"};
// sort 내림차순 정렬
Arrays.sort(arr1, Collections.reverseOrder());
Arrays.sort(arr2, Collections.reverseOrder());
System.out.println(Arrays.toString(arr1));
// [5, 4, 3, 2, 1]
System.out.println(Arrays.toString(arr2));
// [e, d, c, b, a]
사용 예시(2)
Integer[] arr1 = { 5, 3, 2, 1, 4 };
String [] arr2 = {"c", "d", "e", "b", "a"};
// sort 인덱싱 내림차순 정렬
Arrays.sort(arr1, 2, 5, Comparator.reverseOrder());
Arrays.sort(arr2, 2, 5, Comparator.reverseOrder());
System.out.println(Arrays.toString(arr1));
// [5, 3, 4, 2, 1]
System.out.println(Arrays.toString(arr2));
// [c, d, e, b, a]
배열 검색
| 리턴 타입 | 메소드 | 내용 |
|---|---|---|
| int | binarySearch(배열, 찾는값) | 전체 배열 항목에서 찾는값의 인덱스 리턴 |
사용 예시
String[] arr1 = {"h", "e", "l", "l", "o", "!"};
Arrays.sort(arr1);
System.out.println(Arrays.toString(arr1));
// [!, e, h, l, l, o]
System.out.println(Arrays.binarySearch(arr1, "l"));
// 4 -> 중복이 있다면 맨 마지막으로 나온 값의 인덱스를 리턴
배열 항목 채우기
| 리턴 타입 | 메소드 | 내용 |
|---|---|---|
| void | fill(배열, 값) | 전체 배열 항목에 동일한 값을 저장 |
| void | fill(배열, int start, int end, 값) | start부터 end-1까지의 항목에만 동일한 값을 저장 |
사용 예시(1)
String[] arr1 = {"h", "e", "l", "l", "o", "!"};
String[] arr2 = new String[arr1.length];
Arrays.fill(arr2, "x");
System.out.println(Arrays.toString(arr2));
// [x, x, x, x, x, x]
사용 예시(2)
String[] arr1 = {"h", "e", "l", "l", "o", "!"};
String[] arr2 = new String[arr1.length];
Arrays.fill(arr2, 2, 5, "x");
System.out.println(Arrays.toString(arr2));
// [null, null, x, x, x, null]