해당 글의 목적은 주요 배열 조작함수(기본 배열 구성 및 Arrays)를 이해하고 예제를 통한 이해를 돕기 위해 작성한 글입니다. 해당 글에서는 모든 함수에 대해서는 포함하고 있지 않으며 자주 사용되는 함수 위주로 작성하였습니다. (상시 업데이트 예정입니다)
![](https://t1.daumcdn.net/keditor/emoticon/face/large/073.png)
1) 배열 초기 구성
1. 배열 초기화
💡 배열을 구성하고자 할 때 최초 배열의 “사이즈”를 지정해야 배열을 구성할 수 있습니다. 또한 배열의 사이즈 지정 및 값을 초기화해 줄 수 있습니다. ( * Collection 함수의 ArrayList는 동적으로 사이즈 지정이 가능하여서 별도의 사이즈를 지정하지 않아도 된다는 차이점이 있습니다)
- 배열 선언 및 생성 : [예시] String[] strArr = {};
- 배열의 사이즈 지정 : [예시] String[] strArr2 = new String [3];
- 배열의 요소 지정(초기화): [예시] String [] strArr3 = {"one", "two", "three"};
// 1. '사이즈'와 '값'이 둘다 없는 빈 배열
String[] strArr = {};
// 2. '사이즈'는 존재하지만 '값'이 없는 빈 배열
String[] strArr2 = new String[3];
// 3. '사이즈'가 자동 지정된 '값'이 있는 배열
String[] strArr3 = {"one", "two", "three"};
// 4. 빈 배열에 값 넣기
String[] strArr4 = new String[3];
strArr4[0] = "one";
strArr4[1] = "two";
strArr4[2] = "three";
// 5. 빈 배열 -> 사이즈 할당 -> 값 넣기
String[] strArr5 = {};
strArr5 = new String[3];
for (int i = 0; i < strArr5.length; i++) {
strArr3[i] = Integer.toString(i);
}
2. 배열 요소 삽입 및 추출
💡 배열의 사이즈를 지정하여서 배열을 구성하였다면, 해당 배열 내에 요소들을 삽입을 하고 추출을 할 수 있습니다.
// [CASE1] 배열의 사이즈 지정과 동시에 값 할당
String[] initStrArr = {"one", "two", "three", "four", "five"};
log.debug(Arrays.toString(initStrArr)); // ["one", "two", "three", "four", "five"]
// [CASE2] 배열 선언 및 각각의 값 할당
String[] initStrArr2 = new String[3];
initStrArr2[0] = "apple";
initStrArr2[1] = "banana";
initStrArr2[2] = "cherry";
log.debug(Arrays.toString(initStrArr2)); // [apple, banana, cherry]
3. [참고] 배열과 Collection 함수 간의 전환 : Array To ArrayList / ArrayList To Array
💡 Array를 Collection 함수인 ArrayList로 전환을 하거나 ArrayList를 Array로 전환하는 방법에 대해서 알아봅니다.
💡 Array는 정적으로 초기에 사이즈를 지정해야 배열을 구성할 수 있으나 ArrayList는 초기에 사이즈를 지정할 필요 없고 동적으로 사이즈를 지정하여 배열을 구성할 수 있습니다.
💡 Array는 length()로 배열의 사이즈를 확인하고 ArrayList는 size()로 배열의 사이즈를 확인할 수 있습니다.
// 1. Array Initialize
String[] strArr = {"one", "two", "three"};
// 1.1. [배열 -> 컬렉션 함수] 배열 리스트(ArrayList) 선언 및 초기화합니다.
List<String> strArrList = new ArrayList<>(Arrays.asList(strArr)); // ArrayList : ["one", "two", "three"]
// 1.2.1 [컬렉션 함수 -> 배열] 사이즈 지정 및 배열 리스트 값을 전환.
strArr = strArrList.toArray(new String[strArrList.size()]); // String[] : ["one", "two", "three"]
// 1.2.2 [컬렉션 함수 -> 배열] 사이즈 지정 및 배열 리스트 값을 전환.
for (int j = 0; j < integerList.size(); j++) {
strArr[j] = strArrList.get(j); // String[] : ["one", "two", "three"]
}
2) Arrays를 이용한 배열 조작
💡 해당 Arrays는 별도의 패키지(import java.util.Arrays)를 import하여서 사용이 됩니다.
1. 요약
분류 | 메서드 명 | return type | 설명 |
배열 변환 | Arrays.asList(array) | List<T> | 해당 메서드는 배열(Array)을 기반으로 Collection 함수의 ArrayList로 형변환을 하여 반환해주는 함수입니다. |
배열 복사 | Arrays.copyOf(array, copyArrayLenght) | T[] | 해당 메서드는 배열 전체를 복사하여서 복사할 길이 만큼 지정하여 복사한 새로운 배열로 반환해주는 함수입니다. |
배열 복사 | Arrays.copyOfRange(array, startIntex, endIndex) | T[] | 해당 메서드는 원본 배열의 시작 인덱스와 끝 인덱스를 지정하여서 복사한 새로운 배열로 반환해주는 함수입니다. |
배열 채우기 | Arrays.fill(array, n) | void | 해당 메서드는 배열내에 지정한 범위 내에 “동일한 값”으로 채워주는 함수입니다. |
배열 채우기 | Arrays.setAll(array, generator) | void | 해당 메서드는 배열을 채우는데 사용하는 배열이며, 배열의 값은 순차적으로 메서드로 “구성한 값”으로 채워주는 함수입니다. |
배열 값 출력 | Arrays.toString(array) | String | 해당 메서드는 배열을 문자열로 변환하여 반환해주는 함수입니다. |
배열 정렬 | Arrays.sort(array) | void | 해당 메서드는 배열내의 요소들을 오름차순/내림차순, 특정 구간을 정하여 정렬을 수행해주는 함수입니다. |
배열 간의 비교 | Arrays.equals(array1, array2); | boolean | 해당 메서드는 두 배열이 “동일한 수”의 요소를 포함하고 두 배열이 모든 해당 “요소 쌍의 값이 동일한지”에 대해 비교하여 진위형(boolean)으로 반환해주는 함수입니다. |
배열 간의 비교 | Arrays.deepEquals(array1, array2) | boolean | 해당 메서드는 단일 차원 또는 다차원 배열의 두 배열이 같은지 여부를 비교하여 진위형(boolean)으로 반환해주는 함수입니다. 또한 차원에 관계없이 두 개의 중첩 배열(즉, 다차원 배열)을 비교할 수 있습니다. |
배열 요소 검색 | Arrays.binarySearch() | int (index) | 해당 메서드는 배열의 요소를 검색하여 해당 요소의 인덱스를 반환해주는 함수입니다. |
[참고] Java Arrays Class 설명
Arrays class in Java - GeeksforGeeks
A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.
www.geeksforgeeks.org
2. 배열 변환 : Arrays.asList(array)
💡 해당 메서드는 배열(Array)을 기반으로 Collection 함수의 ArrayList로 형변환을 하여 반환해 주는 함수입니다.
// 1. [배열 -> 컬렉션 함수] 배열(Array) 선언 및 초기화합니다.
String[] strArr = {"one", "two", "three"};
// 2. [배열 -> 컬렉션 함수] 배열 리스트(ArrayList) 선언 및 초기화합니다.
List<String> strArrList = new ArrayList<>(Arrays.asList(strArr)); // ArrayList : ["one", "two", "three"]
// 1. [컬렉션 함수 -> 배열] 배열(Array) 사이즈 지정합니다.
String[] strArr2 = new String[strArrList.size()];
// 2. [컬렉션 함수 -> 배열] 배열(Array) - 배열리스트 값을 전환합니다.
strArr2 = strArrList.toArray(strArr2); // String[] : ["one", "two", "three"]
[참고] Array.asList()에 대한 추가 설명
Arrays asList() method in Java with Examples - GeeksforGeeks
A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.
www.geeksforgeeks.org
3. Arrays.copyOf(array, copyArrLength)
💡 해당 메서드는 배열 전체를 복사하여서 복사할 길이만큼 지정하여 복사한 새로운 배열로 반환해 주는 함수입니다.
💡 원본의 배열의 사이즈를 넘어가면 0의 값으로 채워줍니다.
int[] arr = {0, 1, 2, 3, 4};
// 동일한 배열을 복사합니다.
int[] newArray1 = Arrays.copyOf(arr, arr.length); // [0, 1, 2, 3, 4]
int[] newArray2 = Arrays.copyOf(arr, 3); // [0, 1, 2]
int[] newArray3 = Arrays.copyOf(arr, arr.length + 3); // [0, 1, 2, 3, 4, 0, 0, 0]
[참고] Array.copyOf()에 대한 추가 설명
Arrays copyOf() in Java with examples - GeeksforGeeks
A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.
www.geeksforgeeks.org
4. Arrays.copyOfRange(array, startIntex, endIndex)
💡 해당 메서드는 원본 배열의 시작 인덱스와 끝 인덱스를 지정하여서 복사한 새로운 배열로 반환해 주는 함수입니다.
💡 원본의 배열의 사이즈를 넘어가면 0의 값으로 채워줍니다.
int[] arr = {0, 1, 2, 3, 4};
int[] copyArrIdx = Arrays.copyOfRange(arr, 0, arr.length + 2); // [0, 1, 2, 3, 4, 0, 0]
[참고] Arrays.copyOfRange()에 대한 추가 설명
Java.util.Arrays.copyOfRange() in Java - GeeksforGeeks
A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.
www.geeksforgeeks.org
[참고] Array.copyOf()와 Array.copyOfRange() 비교
분류 | Arrays.CopyOf() | Arrays.copyOfRange |
복사 시작 인덱스 지정 가능 여부 | O | O |
복사 끝 인덱스 지정 가능 여부 | X | O |
복사 사이즈 초과시 값 채워줌 여부 | O | O |
5. Arrays.fill(array, value) / Arrays.fill(array, startIndex, endIndex, value)
💡 해당 메서드는 배열 내에 지정한 범위 내에 “동일한 값”으로 채워주는 함수입니다.
/*
* Arrays.fill : 해당 메서드는 배열내에 지정한 동일한 값으로 채워주는 함수입니다.
*/
// [CASE1] 모든 빈 공간에 채워주는 fill
int[] fillArr1 = new int[5];
Arrays.fill(fillArr1, 369); // [369, 369, 369, 369, 369]
// [CASE2] 2,3,4 공간에 해당 값을 채워주는것과 같지만 모두 다 채워준다.
int[] fillArr2 = new int[5];
fillArr2[0] = 123;
fillArr2[1] = 456;
fillArr2[2] = 789;
Arrays.fill(fillArr2, 369); // [369, 369, 369, 369, 369]
// [CASE3] 특정 구간에 채워주는 방식 (시작 인덱스와 종료인덱스 입력)
int[] fillArr3 = new int[5];
fillArr3[0] = 123;
fillArr3[1] = 456;
fillArr3[2] = 689;
Arrays.fill(fillArr3, 3, fillArr3.length, 369); // [123, 456, 689, 369, 369]
// [CASE4] fill 함수와 repeat 함수를 사용하여 순차적인 별 채워넣기
String[] fillArr4 = new String[5];
for (int i = 0; i < fillArr4.length; i++) {
Arrays.fill(fillArr4, i, i + 1, "*".repeat(i + 1)); // "*", "**", "***", "****", "*****"
}
// [CASE5] 배열의 길이보다 더 채워주는 경우 => 에러 발생 : Array index out of range: 8
int[] fillArr5 = new int[5];
fillArr5[0] = 123;
fillArr5[1] = 456;
fillArr5[2] = 689;
Arrays.fill(fillArr5, 3, fillArr5.length + 3, 369); // Array index out of range: 8
[참고] Array.filll()에 대한 추가 설명
Arrays.fill() in Java with Examples - GeeksforGeeks
A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.
www.geeksforgeeks.org
6. Arrays.setAll(array, generator)
💡 해당 메서드는 배열을 채우는 데 사용하는 배열이며, 배열의 값은 순차적으로 메서드로 “구성한 값”으로 채워주는 함수입니다.
// [CASE1] setAll을 통해 배열 내에 변형된 숫자를 채워넣는다. : 100까지 랜덤한 숫자들로 배열을 채워 넣는다
int[] arr1 = new int[5];
Arrays.setAll(arr1, i -> (int) (Math.random() * 101); // 64, 17, 69, 56, 6
// [CASE2] setALL을 통해 배열 내에 변형된 문자을 채워 넣는다. : 별을 순차적으로 증가시켜 배열에 추가를 합니다.
String[] arr2 = new String[5];
Arrays.setAll(arr2, i -> "*".repeat(i + 1)); // ["*", "**", "***", "****", "*****"]
[참고] Array.setAll()에 대한 추가 설명
Java.util.Arrays.parallelSetAll(), Arrays.setAll() in Java - GeeksforGeeks
A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.
www.geeksforgeeks.org
[참고] Arrays.fill()와 Arrays.setAll() 비교
분류 | Arrays.fill() | Arrays.setAll() |
변형 데이터의 반영 가능 여부 | X | O |
7.Arrays.toString(array)
💡 해당 메서드는 배열을 문자열로 변환하여 반환해 주는 함수입니다.
/*
* Arrays.toString : 해당 메서드는 배열을 문자열로 변환해주는 함수입니다.
*/
int[] orgArr = {0, 1, 2, 3, 4}; // [0, 1, 2, 3, 4]
String arrToStr = Arrays.toString(arr); // "[0, 1, 2, 3, 4]",
[참고] Array.toString()에 대한 추가 설명
Arrays.toString() in Java with Examples - GeeksforGeeks
Convert Arrays to String in Java using Arrays.toString() with examples. Why does Object.toString() not work for Arrays as Arrays.toString()?
www.geeksforgeeks.org
8. Arrays.sort(array)
💡 해당 메서드는 배열 내의 요소들을 오름차순/내림차순, 특정 구간을 정하여 정렬을 수행해 주는 함수입니다.
💡 해당 정렬한 배열은 해당 메모리 내에서 유효합니다.
💡 해당 메서드를 이용하여서 내림차순, 오름차순, 특정 구간의 정렬이 가능합니다.
1. 숫자 배열의 정렬
/*
* 숫자 배열의 정렬
*/
Integer[] sortNumArr1 = {0, 1, 2, 3, 4};
Integer[] sortNumArr2 = {10, 11, 1, 2, 4};
// [CASE1] 숫자 오름차순 정렬 -1 : 오름차순으로 정렬이 됩니다.
Arrays.sort(sortNumArr1); // [0, 1, 2, 3, 4]
Arrays.sort(sortNumArr2); // [1, 2, 4, 10, 11]
// [CASE2] 숫자 오름차순 정렬 -2 : 오름차순으로 정렬이 됩니다.
Arrays.sort(sortNumArr1, Comparator.naturalOrder()); // [0, 1, 2, 3, 4]
Arrays.sort(sortNumArr2, Comparator.naturalOrder()); // [1, 2, 4, 10, 11]
// [CASE3] 숫자 내림차순 정렬 -1 : 내림차순으로 정렬이 됩니다.(* 해당 주의 사항은 Wrapper Class 를 이용하여야 합니다.)
Arrays.sort(sortNumArr1, Collections.reverseOrder()); // [4, 3, 2, 1, 0]
Arrays.sort(sortNumArr2, Collections.reverseOrder()); // [11, 10, 4, 2, 1]
// [CASE4] 숫자 내림차순 정렬 -2 : 내림차순으로 정렬이 됩니다.(* 해당 주의 사항은 Wrapper
Arrays.sort(sortNumArr1, Comparator.reverseOrder()); // [4, 3, 2, 1, 0]
Arrays.sort(sortNumArr2, Comparator.reverseOrder()); // [11, 10, 4, 2, 1]
// [CASE5] 숫자 인덱스 범위 정렬 : 시작 인덱스와 종료 인덱스를 선택하여서 정렬이 됩니다.
Arrays.sort(sortNumArr1, 0, 3); // [1, 10, 11, 2, 4]
Integer[] sortNumArr3 = {10, 11, 1, 2, 4};
// [CASE5] 숫자 내림차순 정렬 : Lambda를 이용한 내림 차순으로 정렬
Arrays.sort(sortNumArr3, (s1, s2) -> s2 - s1); // [11, 10, 4, 2, 1]
// [CASE6] 숫자 오름차순 정렬 : Lambda를 이용한 오름 차순으로 정렬
Arrays.sort(sortNumArr3, (s1, s2) -> s1 - s2); // [1, 2, 4, 10, 11]
2. 문자열 배열의 정렬 : 대소문자 구분하여 정렬
/*
* 문자열의 정렬-1 : 대소문자를 구분하여 정렬하는 방식
*/
String[] sortStrArr1 = {"strawberry", "Strawberry", "mango", "Mango", "cherry", "Cherry", "banana", "Banana", "apple", "Apple"};
// [CASE1] 문자 정렬 : 오름차순으로 정렬합니다.
Arrays.sort(sortStrArr1); // [Apple, Banana, Cherry, Mango, Strawberry, apple, banana, cherry, mango, strawberry]
// [CASE2] 문자 정렬 : 내림차순으로 정렬이 됩니다. (* 해당 주의 사항은 Wrapper Class 를 이용하여야 합니다.)
Arrays.sort(sortStrArr1, Collections.reverseOrder()); // [strawberry, mango, cherry, banana, apple, Strawberry, Mango, Cherry, Banana, Apple]
3. 문자열 배열의 정렬 : 대소문자 구분 없이 정렬
/*
* 문자열의 정렬-2 : 대소문자 구분없이 정렬하는 방식
*/
String[] sortStrArr2 = {"strawberry", "Strawberry", "mango", "Mango", "cherry", "Cherry", "banana", "Banana", "apple", "Apple"};
// [CASE1] 문자 정렬 : 오름차순으로 정렬합니다. : 대소문자 구분 O
Arrays.sort(sortStrArr2, String.CASE_INSENSITIVE_ORDER); // [apple, Apple, banana, Banana, cherry, Cherry, mango, Mango, strawberry, Strawberry]
// [CASE2] 문자 정렬 : 내림차순으로 정렬합니다. : 대소문자 구분 O
Arrays.sort(sortStrArr2, Collections.reverseOrder(String.CASE_INSENSITIVE_ORDER)); // [strawberry, Strawberry, mango, Mango, cherry, Cherry, banana, Banana, apple, Apple]
[참고] Array.sort()에 대한 추가 설명
Arrays.sort() in Java with examples - GeeksforGeeks
A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.
www.geeksforgeeks.org
9. Arrays.equals(array1, array2) : 1차원 배열
💡 해당 메서드는 두 배열이 “동일한 수”의 요소를 포함하고 두 배열이 모든 해당 “요소 쌍의 값이 동일한지”에 대해 비교하여 진위형(boolean)으로 반환해 주는 함수입니다.
/*
* Arrays.equals : 해당 메서드는 두 배열이 동일한 수의 요소를 포함하고 두 배열이 모든 해당 요소 쌍이 동일한지에 대한 비교를 수행합니다.
*/
int[] arr1 = {1, 2, 3, 4};
int[] arr2 = {1, 2, 3, 4};
int[] arr3 = {1, 2, 4, 3};
boolean isEquals1 = Arrays.equals(arr1, arr2); // true
boolean isEquals2 = Arrays.equals(arr1, arr3); // false
[참고] Array.equals()에 대한 추가 설명
Java.util.Arrays.equals() in Java with Examples - GeeksforGeeks
A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.
www.geeksforgeeks.org
10. Arrays.deepEquals(array1, array2) : 단일 차원 또는 다차원 배열
💡 해당 메서드는 단일 차원 또는 다차원 배열의 두 배열이 같은지 여부를 비교하여 진위형(boolean)으로 반환해 주는 함수입니다. 또한 차원에 관계없이 두 개의 중첩 배열(즉, 다차원 배열)을 비교할 수 있습니다.
int a1[][] = {{10, 20}, {40, 50}, {60, 70}};
int a2[][] = {{30, 20}, {10, 0}, {60, 80}};
int a3[][] = {{10, 20}, {40, 50}, {60, 70}};
boolean isDeepEquals1 = Arrays.deepEquals(a1, a2); // false
boolean isDeepEquals2 = Arrays.deepEquals(a1, a3); // true
[참고] Array.deepEquals()에 대한 추가 설명
Java.util.Arrays.deepEquals() in Java - GeeksforGeeks
A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.
www.geeksforgeeks.org
[참고] Arrays.equals()와 Arrays.deepEquals() 비교
분류 | Arrays.equals() | Arrays.deepEquals() |
1차원 배열 비교 여부 | O | O |
다차원 배열 비교 여부 | X | O |
11. Arrays.binarySearch()
💡 해당 메서드는 배열의 요소를 검색하여 해당 요소의 인덱스를 반환해주는 함수입니다.
[참고] Array.binarySearch()에 대한 추가 설명
Binary Search - GeeksforGeeks
A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.
www.geeksforgeeks.org
오늘도 감사합니다. 😀
'Java > 이론 및 문법' 카테고리의 다른 글
[Java] Stream API 이해하기 -2: Stream 중간연산 (4) | 2023.02.08 |
---|---|
[Java] Stream API 이해하기 -1: 용어 및 Stream 생성 (4) | 2023.02.05 |
[Java] 정규표현식(RegExp) 이해하기 : 패턴, 문자 클래스, 자주 사용 패턴 (2) | 2023.01.23 |
[Java] 문자열(String) 조작 함수 이해하기 : 조작 및 비교 함수 (2) | 2023.01.21 |
[Java] 숫자(Number) 조작 함수 이해하기 : Math, 진법 변환 (2) | 2023.01.14 |