Collection → Array 변환

이리·2025년 1월 25일
0
post-thumbnail

List 인터페이스를 확인해보면 아래 두가지 타입의 메서드를 확인할 수 있습니다.

  • Object[] toArray()
  • T[] toArray(T[] a)

이 두 메소드는 컬렉션을 배열로 변환해주는 메소드 입니다.

그럼 이 둘의 차이에 대해 알아보도록 하겠습니다.

toArray()

파라미터로 전달되는 것이 없는 toArray()의 경우 반환값이 Object 배열을 반환해줍니다.

만약 Object가 아닌 다른 클래스 배열로 변환하고자 한다면 toArray(T[] a) 메소드를 사용해야 합니다.

toArray(T[] a)

해당 메소드의 경우 전달된 배열 a의 크기에따라 다른 결과값을 반환합니다.

배열로 변환하는 컬렉션의 크기가 10이라고 가정할때 a의 길이가 작은 경우와 크거나 같은 경우 두가지 경우로 나뉩니다.

  • 컬렉션의 크기 < 배열의 크기: 새 배열을 생성해서 반환
  • 컬렉션의 크기 ≥ 배열의 크기: 기존 배열을 그대로 사용
    • 요소가 복사된 배열을 반환

toArray(new T[0])

toArray 메서드는 전달받은 배열 a의 크기를 확인한 뒤 비교과정을 통해 더 길면 복사, 짧으면 새로운 배열을 생성한다는 것을 알 수 있었습니다.

그 말은, 항상 가장 작은 배열 길이인 0으로 생성한다면 가장 안정적인 형태의 변환이 가능하다는 말이 될수 있습니다.

첫번째로, 만들어질 타입을 명시해 줌으로써 항상 지정된 타입을 보장합니다.

두번째로, Java 11 이후 JDK에서는 new T[0]의 크기가 0인 경우, 내부적으로 리스트 크기에 맞는 배열을 즉시 생성하도록 최적화 되어있기때문에 성능적으로도 우수합니다.

예제

List<Integer> list = new ArrayList<>();

Object[] answer1 = list.toArray(); // 별도 캐스팅 필요 
Integer[] answer2 = list.toArray(new Integer[0]);

0개의 댓글

관련 채용 정보