Java

[Java] 배열과 리스트 사이의 변환 방법들 ( feat. Arrays.asList() )

ImKDM 2022. 9. 1. 17:20
728x90

 

 

배열을 리스트로 변환하는 방법은 크게 두 가지로 나뉜다.

1-1.  '객체' 배열인가?  [  배열    ☞   리스트  ]

만약 '객체' 배열을 리스트로 변환하려면 다음과 같은 방법들이 있다.

    -   Arrays.asList(  ) 사용

            :  Arrays 클래스의 정적 메서드인 asList( ) 를 이용한다. 반환 타입은 List 형이다.

              asList( ) 는 크기가 정적인 리스트를 반환하기 때문에 값 변경은 가능하지만, 리스트 사이즈를

              바꿀 수 없다. 리스트 사이즈를 변경하는 add, remove 메서드를 사용하면 예외가 발생한다.

             배열과 리스트가 동기화 됐기 때문에 리스트의 값을 변경하면 원본 배열의 값도 변한다.

 

 String[] arr = { "A", "B", "C" };   
 List<String> list = Arrays.asList(arr);

    -   new  ArrayList < > ( Arrays.asList( ) ) 사용

            :  원본 배열의 값과 변환 된 리스트의 값이 동기화 되는 것을 막기 위해서, Arrays.asList( ) 로

               변환된 리스트를 통해 새로운 ArrayList 객체를 생성하면 크기의 변화에 문제가 없다.

               즉, 먼저 Arrays.asList( ) 로 배열을 리스트로 변환한 결과를 ArrayList 의 생성자로 전달해서

               새로운 ArrayList 를 만드는 것이다. 따라서 동기화도 이뤄지지 않아 원본 데이터의 변경도 없다.

 

String[] arr = { "A", "B", "C" };
List<String> list = new ArrayList<>(Arrays.asList(arr));

1 - 2.  '객체' 배열인가?  [ 리스트   ☞   배열  ]

    -    toArray( ) 사용

           :  List 인터페이스의 인스턴스 메서드인 toArray( ) 를 통해서 리스트를 배열로 바꿀 수 있다.

              toArray( ) 메서드의 매개변수에 아무것도 넣지 않으면 Object [ ] 이 생성된다. 그러나 원하는

              참조형이 있다면 매개변수에 해당 참조형의 배열 객체를 생성한다. 크기는 0 으로 하면 된다.

 

ArrayList<String> arrList = new ArrayList<String>();
String arr[] = arrList.toArray(new String[0]);

 

2.  원시형(Primitive) 배열인가?  [  배열    ☞   리스트  ]    &&    [  리스트   ☞    배열   

만약 배열이 원시형 타입이라면( int,  double,  float 등 ), 위와 같은 방법으로 리스트로 변환할 수 없다. Arrays.asList( ) 메서드는 원시형 타입을 Wrapper 클래스로 자동 형변환을 지원하지 않는다. 따라서 int 형 배열을 Integer 형으로 변환이 되지 않는다.

  for 문 사용

따라서 원시형 배열에서 리스트로, 또는 리스트에서 원시형 배열로 변환하는 방법은 'for 문'을 통한 전환이 있다. 반복문을 통해 하나씩 대입하면 자동 형변환이 이뤄지기 때문에 가능하다.