코딩테스트(JAVA)

[코딩테스트] 배열과 리스트 변환

goblin- 2025. 1. 30. 21:13

배열과 리스트는 Java에서 자주 사용되는 자료구조이며, 필요에 따라 서로 변환해야 하는 경우가 많습니다. 여기서는 배열을 리스트로 변환하는 방법과 리스트를 배열로 변환하는 방법을 각각 살펴보겠습니다.

 

1-1. 배열을 리스트로 변환

 

 new ArrayList<>(Arrays.asList()) 사용 (가변 리스트)

 

리스트에 요소 추가/삭제가 필요한 경우

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        String[] array = {"a", "b", "c"};

        // 배열 → 리스트 변환 (가변 리스트)
        List<String> list = new ArrayList<>(Arrays.asList(array));

        list.add("d"); // 정상 동작
        System.out.println(list); // [a, b, c, d]
    }
}

 

 

 

 

1-2. 리스트를 배열로 변환

 

리스트를 배열로 변환하는 방법에는 여러 가지가 있으며, 주로 toArray() 메서드를 활용합니다.

 

(1) toArray()를 사용한 변환 (Object[], T[] 변환)

 

toArray()에는 두 가지 형태가 있습니다.

 

(1-1) toArray() 사용 (Object[] 반환)

import java.util.Arrays;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<String> list = Arrays.asList("Apple", "Banana", "Cherry");

        // 리스트를 Object 배열로 변환
        Object[] array = list.toArray();

        System.out.println(Arrays.toString(array)); // [Apple, Banana, Cherry]
    }
}

 

특징

toArray()는 기본적으로 Object[] 배열을 반환합니다.

만약 String[]으로 변환해야 한다면, toArray(new String[0])을 사용해야 합니다.

 

(1-2) toArray(T[] a) 사용 (특정 타입 배열 반환)

import java.util.Arrays;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<String> list = Arrays.asList("Apple", "Banana", "Cherry");

        // 리스트를 String 배열로 변환
        String[] array = list.toArray(new String[0]);

        System.out.println(Arrays.toString(array)); // [Apple, Banana, Cherry]
    }
}

 

특징

new String[0]을 전달하면 String[] 타입의 배열이 반환됩니다.

리스트 크기에 맞게 자동으로 배열이 생성됩니다.

 

(2) Stream API를 활용한 변환 (toArray(T[]::new))

 

Java 8 이상에서는 Stream API를 사용해 변환할 수 있습니다.

import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;

public class Main {
    public static void main(String[] args) {
        List<String> list = Arrays.asList("Apple", "Banana", "Cherry");

        // Stream API를 사용하여 변환
        String[] array = list.stream().toArray(String[]::new);

        System.out.println(Arrays.toString(array)); // [Apple, Banana, Cherry]
    }
}

 

특징

String[]::new을 사용하면 리스트 크기에 맞는 배열이 자동 생성됩니다.

toArray(new String[0])과 동일한 역할을 합니다.

 

 

(3) mapToInt(Integer::intValue).toArray()를 활용한 변환 (기본형 배열 변환)

 

일반적인 toArray()Integer[] 객체 배열을 반환하지만, 기본형 int[] 배열이 필요할 경우 mapToInt()를 사용해야 합니다.

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) {
        List<Integer> list = Arrays.asList(10, 20, 30, 40, 50);

        // List<Integer> → int[] 변환
        int[] array = list.stream().mapToInt(Integer::intValue).toArray();

        System.out.println(Arrays.toString(array)); // [10, 20, 30, 40, 50]
    }
}

 

특징

mapToInt(Integer::intValue)를 사용하여 Integerint 변환을 수행합니다.

toArray()를 사용하여 int[] 배열을 생성합니다.

 

정리

변환 유형 방법 코드
배열 -> 리스트 Arrays.asList() List<String> list= Arrays.asList(arr);
  new ArrayList<>(Arrays.asList()) List<String> list = new ArrayList<>(Arrays.asList(arr));
  Stream.of().collect(Collectors.toList()) List<String> list = Stream.of(arr).collect(Collectors.toList());
리스트 -> 배열 toArray() Object[] arr = list.toArray();
  toArray(T[]::new) String[] arr = list.stream().toArray(String[]::new);
리스트 -> 기본형 배열 mapToInt().toArray() int[] arr = list.stream().mapToInt(Integer::intValue).toArray();

 

 

+int 배열을 List<Integer>로 변환하는 방법

 

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5};

        // int[] → List<Integer> 변환
        List<Integer> list = Arrays.stream(arr)
                                   .boxed()	//int -> Integer
                                   .collect(Collectors.toList());

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

 

Java 16 이상: toList()

import java.util.Arrays;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        int[] a = {1, 2, 3, 4, 5};

        // Java 16 이상에서 사용 가능
        List<Integer> test = Arrays.stream(a).boxed().toList();

        System.out.println(test); // [1, 2, 3, 4, 5]
    }
}