본문 바로가기
Language/Java

자바 여러 배열 합치는 방법 정리

by wakestand 2020. 12. 10.
반응형

자바에서 배열을 여러 배열을 합치는 방법은

Stream을 이용한 방법

System.arraycopy를 이용한 방법

list와 Collections을 이용한 방법이 있는데

 

차례대로 알아보자

 

먼저 Stream을 이용한 방법은 

Stream.concat(Arrays.stream(배열명), Arrays.stream(배열명)).toArray(데이터타입::new);

를 사용해주면 되는데

스트림이 뭔가 어려워 보일 수 있지만

배열 두개를 concat 한 뒤 데이터타입의 배열로 보내주겠다

이런 내용이다

 

다음으로 System.arraycopy를 이용한 방법은

먼저 배열 두개의 크기를 합친 배열을 생성한 후

System.arraycopy(합칠_배열, 합칠_배열의_시작인덱스, 배열, 배열의_시작인덱스, 몇개_넣을지)

위와 같이 사용해주면 되는데

 

두 배열을 합칠 경우에는

첫 배열의 합칠_배열의_시작인덱스,

배열의_시작인덱스를 0으로 설정하고

 

다음 배열부터는 배열의_시작인덱스를

첫 배열의 크기로 잡아주면 된다

 

그럼 처음 배열이 들어간 다음에

새로운 배열의 값이 들어가는 식이 된다

 

마지막으로는 List, Collections을 이용한 방법인데

일단 List를 생성한 후

Collections.addAdd(리스트명, 배열명);

으로 리스트 안에 배열 값을 모두 넣어주고

list명.toArray(new 데이터타입[list명.size()]);

으로 list에서 다시 배열 타입으로 빼내주면 된다

 

마지막으로 예제에 사용한 코드는 아래와 같다

 

public class Test1 {
	public static void main(String[] args) {
		String[] word1 = {"A", "B"};
		String[] word2 = {"C", "D"};
		String[] result;
		
		result = Stream.concat(Arrays.stream(word1), Arrays.stream(word2)).toArray(String[]::new);
		Stream.of(word1, word2).flatMap(Arrays::stream).toArray(String[]::new); // Stream::of 도 가능
		System.out.println("Stream을 이용한 배열 합치기 : " 
        				+ Arrays.stream(result).collect(Collectors.toList()));
		// System.arraycopy를 이용한 방법
		// arraycopy(배열, 배열의_시작인덱스, 넣을_배열, 넣을_배열의 시작위치, 몇개 넣을지)
		String[] result2 = new String[word1.length + word2.length];
		System.arraycopy(word1, 0, result2, 0, word1.length);
		System.arraycopy(word2, 0, result2, word1.length, word2.length);
		System.out.println("System.arraycopy를 이용한 배열 합치기 : " 
        				+ Arrays.stream(result2).collect(Collectors.toList()));
		
		// Collections, List를 이용한 방법
		List<String> list = new ArrayList<String>();
		Collections.addAll(list, word1);
		Collections.addAll(list, word2);
		String[] result3 = list.toArray(new String[list.size()]);
		System.out.println("Collections를 이용한 배열 합치기 : " 
        				+ Arrays.stream(result3).collect(Collectors.toList()));
	}
}
반응형

댓글