배열의 크기는 고정되어있기 때문에, 배열을 크기를 늘리면서 새로운 요소를 추가할 수는 없습니다. 더 큰 배열을 만들고, 이전 배열의 요소들을 새로운 배열로 복사한 뒤에 새로운 요소를 추가해야하는데요. 어떻게 구현하는지 알아보겠습니다.
1. Arrays.copyOf()를 이용하여 배열에 새로운 요소 추가
만약 기존 배열에 요소 2개를 추가하려면, 기존 배열보다 크기가 2 큰 새로운 배열을 만들어야합니다.
Arrays.copyOf(arr, size)
는 size 크기의 배열을 만들고 arr을 복사합니다. 기존 배열보다 큰 크기의 배열을 만들면, 새로운 요소를 추가할 수 있습니다.
import java.util.Arrays;
public class Example2 {
public static void main(String[] args) {
String[] arr = {"a", "b", "c"};
String[] newArr = Arrays.copyOf(arr, arr.length + 2);
System.out.println("After copy: " + Arrays.toString(newArr));
newArr[arr.length + 0] = "d";
newArr[arr.length + 1] = "e";
System.out.println("After add: " + Arrays.toString(newArr));
}
}
Output:
After copy: [a, b, c, null, null]
After add: [a, b, c, d, e]
2. System.arraycopy()를 이용하여 배열에 새로운 요소 추가
Arrays.copyOf()
대신에 System.arraycopy()
를 사용하여 동일하게 구현할 수 있습니다.
만약 새로운 요소 2개를 배열에 추가한다고 가정하면, 기존 배열보다 크기가 2 큰 배열을 만들어야 합니다.
System.arraycopy(srcArr, srcPos, destArr, destPos, length)
는 srcArr의 destArr로 복사하는데 srcArr의 srcPos부터 복사를 시작합니다. 복사되는 위치는 destArr의 destPos Index부터입니다. 복사하는 길이는 length로 인자를 전달하면 됩니다.
System.arraycopy()의 자세한 API 사용 방법은 Java - 배열 복사 (deep copy)를 참고해주세요.
다음 예제는 System.arraycopy()
를 사용하여 배열에 새로운 요소를 추가하는 예제입니다.
import java.util.Arrays;
public class Example {
public static void main(String[] args) {
String[] arr = {"a", "b", "c"};
String[] newArr = new String[arr.length + 2];
System.arraycopy(arr, 0, newArr, 0, arr.length);
System.out.println("After copy: " + Arrays.toString(newArr));
newArr[arr.length + 0] = "d";
newArr[arr.length + 1] = "e";
System.out.println("After add: " + Arrays.toString(newArr));
}
}
Output:
After copy: [a, b, c, null, null]
After add: [a, b, c, d, e]
3. List를 이용하여 배열에 새로운 요소 추가
배열과 다르게 List는 가변적으로 크기를 변경할 수 있습니다.
이런 특징을 이용하면, 배열을 리스트로 변경하고 리스트에 새로운 요소들을 추가한 뒤에 다시 리스트를 배열로 변경할 수 있습니다.
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Example1 {
public static void main(String[] args) {
String[] arr = {"a", "b", "c"};
List<String> list = new ArrayList<>(Arrays.asList(arr));
System.out.println("Array to List: " + list);
list.add("d");
list.add("e");
System.out.println("After add: " + list);
String[] newArr = list.toArray(new String[0]);
System.out.println("List to Array: " + Arrays.toString(newArr));
}
}
Output:
Array to List: [a, b, c]
After add: [a, b, c, d, e]
List to Array: [a, b, c, d, e]
Related Posts
- Java - Unsupported class file major version 61 에러
- Java - String.matches()로 문자열 패턴 확인 및 다양한 예제 소개
- Java - 문자열 공백제거 (trim, replace)
- Java - replace()와 replaceAll()의 차이점
- Java - ArrayList 초기화, 4가지 방법
- Java - 배열 정렬(Sorting) (오름차순, 내림차순)
- Java - 문자열(String)을 비교하는 방법 (==, equals, compare)
- Java - StringBuilder 사용 방법, 예제
- Java - 로그 출력, 파일 저장 방법 (Logger 라이브러리)
- Java IllegalArgumentException 의미, 발생 이유
- Java - NullPointerException 원인, 해결 방법
- Seleninum의 ConnectionFailedException: Unable to establish websocket connection 해결
- Java - compareTo(), 객체 크기 비교
- Java - BufferedWriter로 파일 쓰기
- Java - BufferedReader로 파일 읽기
- Java charAt() 함수 알아보기
- Java - BigInteger 범위, 비교, 연산, 형변환
- Java contains()로 문자(대소문자 X) 포함 확인
- Java - Set(HashSet)를 배열로 변환
- Java - 문자열 첫번째 문자, 마지막 문자 확인
- Java - 문자열 한글자씩 자르기
- Java - 문자열 단어 개수 가져오기
- Java - 1초마다 반복 실행
- Java - 배열을 Set(HashSet)로 변환
- Java - 여러 Set(HashSet) 합치기
- Java - 명령행 인자 입력 받기
- Java - 리스트 역순으로 순회, 3가지 방법
- Java - 특정 조건으로 리스트 필터링, 3가지 방법
- Java - HashMap 모든 요소들의 합계, 평균 계산
- Java - 특정 조건으로 HashMap 필터링
- Java - 싱글톤(Singleton) 패턴 구현
- Java - 숫자 왼쪽에 0으로 채우기
- Java - String 배열 초기화 방법
- Java - 정렬된 순서로 Map(HashMap) 순회
- Java - HashMap에서 key, value 가져오기