[Java] ArrayList ↔ Array 변환

Jiwoo Kim·2021년 3월 26일
6

머리에 자바 넣기

목록 보기
2/4
post-thumbnail

ArrayList ↔ Array 변환

모든 원소를 하나씩 다 탐색하며 복사할 수도 있겠지만 그건 너무 비효율적이다. 더 간결한 방식으로 할 수 있는 List와 Array 간 형변환을 정리해보았다.


ArrayList → Array

toArray()

List<Integer> list = new ArrayList<>();
// ...
Object[] arr = list.toArray();
  • List 클래스의 인스턴스 메서드인 toArray()는 Object 타입의 배열을 반환한다.
  • 타입 변환이 자동으로 이루어지지 않아서 리턴 배열을 활용하기 번거롭다.

toArray(T[] a)

List<Integer> list = new ArrayList<>();
// ...
Integer[] arr = list.toArray(new Integer[0]);
  • toArray(T[] a)T 타입 배열을 반환한다.
  • T는 값 타입이 될 수 없기 때문에 int, double, float와 같은 타입의 배열은 이 방법으로는 얻을 수 없다.
  • 파라미터 a의 길이는 0으로 지정하면 알아서 list의 길이에 맞게 조정되어 arr에 저장된다.

stream

List<Integer> list = new ArrayList<>();
// ...
int[] arr = list.stream()
	.mapToInt(Integer::intValue)
    	.toArray();
  • 값타입 배열을 얻기 위해서는 int 값을 꺼내서 배열로 저장해야 한다. 이 때 사용하는 것이 stream이다.
  • list.stream(): Stream<Integer>을 반환한다.
  • mapToInt(Integer::intValue): IntegerintValue() 메서드를 참조해서 값타입인 int로 언박싱한다.
  • toArray(): IntStream의 원소를 배열로 변환한다.


Array → ArrayList

Arrays.asList(T[] a)

String[] arr = {"a", "b", "c", "d"};
List<String> list = Arrays.asList(arr);
  • T가 값 타입이 아닌 경우 위와 같이 간편하게 변환할 수 있다.

stream

int[] arr = {1, 2, 3};
List<Integer> list = Arrays.stream()
			.boxed()
            		.collect(Collectors.toList());
  • 위에서 mapToInt() 과정을 통해 Integer를 int로 언박싱해준 것처럼, 여기서는 반대로 boxed()를 통해 int를 Integer로 박싱해줘야 한다.
  • IntStream로 원소들을 넘겨받았으니 collect()를 호출해서 List로 변환한다.

0개의 댓글