일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Java
- 배열
- vscode
- 자바스크립트
- javascript
- Array
- js
- date
- windows
- Files
- 이클립스
- list
- json
- 문자열
- CSS
- 테이블
- Button
- string
- html
- IntelliJ
- input
- CMD
- table
- Maven
- ArrayList
- Visual Studio Code
- 자바
- Eclipse
- 인텔리제이
- 이탈리아
- 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 |