일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- CSS
- 이클립스
- 정규식
- string
- CMD
- Maven
- vscode
- javascript
- IntelliJ
- 자바
- Java
- json
- date
- Array
- 자바스크립트
- windows
- 배열
- list
- input
- ArrayList
- 문자열
- Visual Studio Code
- Eclipse
- 이탈리아
- 인텔리제이
- table
- 테이블
- html
- js
- Button
- Today
- Total
어제 오늘 내일
[Java] 배열 합치기 본문
Java에서 배열을 합치기 위해서 반복문을 사용할 수도 있지만,
다양한 API를 활용할 수도 있습니다.
- System.arraycopy()
- Collection(List)
- Stream API
- Apache Commons Lang
1. System.arraycopy()
원본 배열을 다른 배열에 복사하면서, 배열을 합치는 방법입니다.
배열을 복사할 때, java.lang.System.arraycopy() 메소드를 사용할 수 있습니다.
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
파라미터
src : 복사할 원본 배열
srcPos : 복사할 원본 배열의 시작 index를 지정할 수 있습니다.
(1로 지정하면, 원본배열의 index 0값은 제외하고, index 1의 값부터 복사됩니다.)
dest : destination array. 원본 배열이 dest 배열로 복사됩니다.
destPos : dest 배열의 destPos index에 원본 배열이 복사됩니다.
length : 원본 배열에서 복사될 element 갯수
코드
import java.util.Arrays; public class ArrayCopy { public static void main(String[] args) { // 1. 합칠 배열 2개 준비 int[] arr1 = { 1, 2, 3 }; int[] arr2 = { 4, 5 }; // 2. 2개 배열의 총 길이 int destLength = arr1.length + arr2.length; // 3. 결과 배열 준비(총 길이는 arr1의 길이 + arr2의 길이) int[] dest = new int[destLength]; // 4. 배열 합치기 // 4.1 arr1을 dest로 복사 (index 0 ~ index 2) System.arraycopy(arr1, 0, dest, 0, arr1.length); // 4.2 arr2를 dest로 복사 (index 3 ~ index 5) System.arraycopy(arr2, 0, dest, arr1.length, arr2.length); // 5. 결과 출력 System.out.println(Arrays.toString(dest)); // [1, 2, 3, 4, 5] } }
System.arraycopy(arr1, 0, dest, 0, arr1.length);
arr1을 dest에 복사하였습니다.
System.arraycopy(arr2, 0, dest, arr1.length, arr2.length);
arr2를 dest에 복사하였습니다.
이때, arr2를 dest의 index 3에 복사하였습니다.
(index 0~2까지는 이미 arr1이 복사되어 있기 때문입니다.)
2. Collection(List)
두번째 방법은 배열을 List로 변환하여 합친 후,
이 List를 다시 배열로 변환하는 방법입니다.
코드
import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class ArrayCopy { public static void main(String[] args) { // 1. 합칠 배열 2개 준비 Integer[] arr1 = { 1, 2, 3 }; Integer[] arr2 = { 4, 5 }; // 2. 배열을 List로 변환 List<Integer> list1 = new ArrayList(Arrays.asList(arr1)); List<Integer> list2 = new ArrayList(Arrays.asList(arr2)); // 3. 두 List 합치기 list1.addAll(list2); // 4. list1을 배열로 변환 Integer[] dest = list1.toArray(new Integer[0]); // 5. 결과 출력 System.out.println(Arrays.toString(dest)); // [1, 2, 3, 4, 5] } }
3. Stream API
코드 1
import java.util.Arrays; import java.util.stream.Stream; public class ArrayCopy { public static void main(String[] args) { // 1. 합칠 배열 2개 준비 Integer[] arr1 = { 1, 2, 3 }; Integer[] arr2 = { 4, 5 }; // 2. 배열 합치기 Integer[] dest = Stream.of(arr1, arr2).flatMap(Stream::of).toArray(Integer[]::new); // 5. 결과 출력 System.out.println(Arrays.toString(dest)); // [1, 2, 3, 4, 5] } }
코드 2
import java.util.Arrays; import java.util.stream.Stream; public class ArrayCopy { public static void main(String[] args) { // 1. 합칠 배열 2개 준비 Integer[] arr1 = { 1, 2, 3 }; Integer[] arr2 = { 4, 5 }; // 2. 배열 합치기 Integer[] dest = Stream .concat(Arrays.stream(arr1), Arrays.stream(arr2)) .toArray(Integer[]::new); // 5. 결과 출력 System.out.println(Arrays.toString(dest)); // [1, 2, 3, 4, 5] } }
4. Apache Commons Lang
org.apache.commons.lang3.ArrayUtils의 addAll() 메소드를 이용하면,
여러개의 배열을 쉽게 합칠 수 있습니다.
Apach Commons Lang 라이브러리를 사용하기 위해서
maven에 dependency를 추가합니다.
<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.12.0</version> </dependency>
코드
import java.util.Arrays; import org.apache.commons.lang3.ArrayUtils; public class ArrayCopy { public static void main(String[] args) { // 1. 합칠 배열 2개 준비 int[] arr1 = { 1, 2, 3 }; int[] arr2 = { 4, 5 }; // 2. 배열 합치기 int[] dest = ArrayUtils.addAll(arr1, arr2); // // 5. 결과 출력 System.out.println(Arrays.toString(dest)); // [1, 2, 3, 4, 5] } }
int[] dest = ArrayUtils.addAll(arr1, arr2);
이 메소드를 이용하면 다건의 배열을 합칠 수 있습니다.
배열을 합치는 방법을 알아보았습니다.
'IT > Java' 카테고리의 다른 글
[Java] String 앞에 문자열 붙이기 (String, StringBuffer, StringBuilder) (0) | 2021.06.07 |
---|---|
[Java] 줄바꿈 하기 (\n, \r, \r\n 의 차이) (3) | 2021.06.06 |
[Java] 파일 특정 라인 읽기 (0) | 2021.06.06 |
[Java] 텍스트 파일의 마지막 라인부터 읽기 (0) | 2021.06.06 |
[Java] Text 파일 라인수 세기 (0) | 2021.06.06 |