이 글에서는 자바(Java)에서 두 개의 리스트(List)를 하나로 결합하는 방법을 알아봅니다. ArrayList 클래스는 AbstractList를 상속하고 List 인터페이스를 구현하며, 필요에 따라 크기가 자동으로 늘어나는 동적 배열(dynamic array)을 지원합니다.
ArrayList는 초기 크기를 지정해 생성할 수 있으며, 저장되는 요소가 지정된 크기를 초과하면 컬렉션이 자동으로 확장됩니다. 반대로 요소를 삭제하면 내부 배열의 크기가 줄어들기도 합니다.
그럼 실제 예제를 통해 두 리스트를 결합하는 과정을 살펴보겠습니다.
입력값
첫 번째 리스트: [Java, Python] 두 번째 리스트: [Mysql, Redshift]
기대 출력 결과
두 리스트를 결합한 결과: [Java, Python, Mysql, Redshift]
알고리즘
STEP 1 - 시작 STEP 2 - 두 개의 리스트 input_list_1과 input_list_2를 선언한다. STEP 3 - 각 리스트에 값을 정의한다. STEP 4 - join_lists() 함수에 두 리스트를 매개변수로 전달해 결합한다. STEP 5 - 결과를 화면에 출력한다. STEP 6 - 종료
예제 1: main() 메서드에서 직접 결합하기
첫 번째 예제는 모든 연산을 main() 메서드 안에서 처리하는 방식입니다. ArrayList의 addAll() 메서드를 호출해 한 리스트의 모든 요소를 결과 리스트에 순서대로 추가합니다.
import java.util.ArrayList;
import java.util.List;
public class Demo {
public static void main(String[] args) {
List<String> input_list_1 = new ArrayList<String>();
input_list_1.add("Java");
input_list_1.add("Python");
System.out.println("첫 번째 리스트: " + input_list_1);
List<String> input_list_2 = new ArrayList<String>();
input_list_2.add("Mysql");
input_list_2.add("Redshift");
System.out.println("두 번째 리스트: " + input_list_2);
List<String> result_list = new ArrayList<String>();
result_list.addAll(input_list_1);
result_list.addAll(input_list_2);
System.out.println("두 리스트를 결합한 결과: " + result_list);
}
}
출력 결과
첫 번째 리스트: [Java, Python] 두 번째 리스트: [Mysql, Redshift] 두 리스트를 결합한 결과: [Java, Python, Mysql, Redshift]
예제 2: 객체 지향 방식으로 함수에 캡슐화하기
두 번째 예제는 리스트 결합 로직을 별도의 함수(join_lists())로 분리해 객체 지향 프로그래밍 스타일로 작성했습니다. 이렇게 하면 코드의 재사용성과 가독성이 크게 향상됩니다.
import java.util.ArrayList;
import java.util.List;
public class Demo {
static void join_lists(List<String> input_list_1, List<String> input_list_2) {
List<String> result_list = new ArrayList<String>();
result_list.addAll(input_list_1);
result_list.addAll(input_list_2);
System.out.println("두 리스트를 결합한 결과: " + result_list);
}
public static void main(String[] args) {
List<String> input_list_1 = new ArrayList<String>();
input_list_1.add("Java");
input_list_1.add("Python");
System.out.println("첫 번째 리스트: " + input_list_1);
List<String> input_list_2 = new ArrayList<String>();
input_list_2.add("Mysql");
input_list_2.add("Redshift");
System.out.println("두 번째 리스트: " + input_list_2);
join_lists(input_list_1, input_list_2);
}
}
출력 결과
첫 번째 리스트: [Java, Python] 두 번째 리스트: [Mysql, Redshift] 두 리스트를 결합한 결과: [Java, Python, Mysql, Redshift]
참고: 자바 8 스트림(Stream) API로 결합하기
자바 8 이상 환경이라면 Stream.concat()과 Collectors.toList()를 조합해 더 간결하게 두 리스트를 결합할 수도 있습니다.
List<String> result = Stream.concat(input_list_1.stream(), input_list_2.stream()) .collect(Collectors.toList());