본문 바로가기
공부 자료/Java

[Java] 배열을 리스트로 변환하기 / 리스트를 배열로 변환하기

by 미노킴 2022. 11. 11.

1. List에 대한 이해

자바는 널리 알려져 있는 자료구조를 사용해서 객체들을 효율적으로 추가, 삭제, 검색할 수 있도록 인터페이스와 구현 클래스를 java.util 패키지에서 제공한다. 이들을 총칭해서 컬렉션 프레임워크(Collection Framework)라 부른다.

 

컬렉션 프레임워크의 주요 인터페이스로는 List, Set, Map 이 있다. 여기선 List만 살펴본다. 

 

List 컬렉션에는 ArrayList, Vector, LinkedList 등의 클래스가 있다. 주로 ArrayList를 많이 사용하며, 이 글도 ArrayList를 사용한 방법만 다룰 예정이다. 

2. 리스트 선언하기

// ArrayList라는 인스턴스를 만들어서 list에 주소를 저장
List<E> list = new ArrayList<>();

//String을 저장하는 ArrayList인 list를 선언하고 초기화
List<String> list = new ArrayList<>();

// list의 마지막 인덱스에 "안녕" 넣음
list.add("안녕")

System.out.println(list) // [안녕]

List<E>에서 E는 리스트에 들어갈 타입을 의미한다. 

3. 배열을 리스트로 변환하기

String과 같은 객체를 리스트에 담을 때와 int, double과 같은 기본 타입(primitive type) 을 담을 때의 방식이 다르다. 왜냐하면 리스트에는 객체만 들어올 수 있기 때문에, 기본 타입 변수를 담을 때는 기본 타입을 객체로 바꾸어서 담아야 하기 때문이다. 기본 타입을 객체로 만들어서 담기 위한 클래스를 래퍼 클래스(Wrapper Class)라고 하며, 기본 타입을 래퍼 클래스로 바꾸는 것을 박싱(boxing), 반대의 경우를 언박싱(unboxing)이라고 한다.

String 배열 => 리스트

우선 객체가 담긴 배열을 리스트로 바꾸는 방법부터 알아보자. Arrays.asList(배열) 을 이용하여 파라미터로 들어간 배열로 이루어진 새로운 리스트를 만들 수 있다. Arrays.asList(배열)을 이용해 변환한 리스트는 고정되어 있어 원소를 제거하거나 값을 바꿀 수 없다. 그럴때는 리스트 선언시 new ArrayList<>(Arrays.asList(배열))로 해주면 된다.

 

//배열 str 선언
String[] str = {"A","B","C"};

//배열 str을 리스트인 list로 변경. 새로운 객체를 만든것이므로 str은 그대로 존재함.
List<String> list = Arrays.asList(str);

System.out.println(list); // [A, B, C]
System.out.println(str); // str의 힙 메모리 주소가 나옴

Int 배열 => 리스트

다음은 int와 같은 기본 타입 변수가 담긴 배열을 리스트로 바꾸는 방법을 알아보자. int 자료형을 Integer로 랩핑을 하는 과정이 필요하다. 이때 Collection의 메소드인 stream을 쓰면 수월하게 변경할 수 있다. 우선 코드로 알아보자.

 

// int 배열
int[] arr = { 1, 2, 3 };

// int -> List
List<Integer> list = Arrays.stream(arr)
        .boxed()// arr의 요소 박싱
        .collect(Collectors.toList()); // 리스트로 변환

System.out.println(list); // [1,2,3]

위에 적혀있다시피 .boxed()를 이용해 arr의 요소들을 박싱하고, 그 후 .collect(Collectors.toList()) 를 통해 리스트로 변환한다. stream에 관한 자세한 내용은 추후에 다룰 예정이다.

 

.collect(Collectors.toList()) 대신 .collect(Collectors.toCollection(LinkedList::new))를 하면 LinkedList로 변환 할 수 있다.

4. 리스트를 배열로 변환하기

3번과 마찬가지로 String 자료형일 때와 원시 자료형일 때의 방법이 서로 다르다.

String 리스트 => 배열

list 뒤에 .stream().toArray(String[]::new)를 붙이면 된다. 자바 11이상이라면 .toArray(String[]::new)로 스트림을 생략하고 사용할 수 있다.

List<String> list = new ArrayList<>();
// ...
String[] arr1 = list.stream().toArray(String[]::new);

//자바 11이상
String[] arr2 = list.toArray(String[]::new);

Integer 리스트 => 배열

List<Integer> list = new ArrayList<>();
// ...
int[] arr = list.stream()
	.mapToInt(Integer::intValue)
    .toArray();

'공부 자료 > Java' 카테고리의 다른 글

[Java] 리스트 관련 메소드 정리  (0) 2022.11.12
[Java] 배열/리스트에서 특정 요소 개수 세기  (0) 2022.11.11
열거 타입(enum)  (0) 2022.11.10
배열 복사와 for문  (0) 2022.11.10
참조 타입과 메모리 영역  (0) 2022.11.10