Language/Java

[Java] 배열에서 ArrayList로, ArrayList에서 배열로 변환하기

KAispread 2022. 6. 1. 13:10
728x90
반응형

자바에는 Collection 인터페이스를 구현하는 List, Set, Queue 계열의 자료 구조가 있다.
이 객체들을 배열로 만들거나, 배열의 데이터를 Collection 자료구조로 변환해야될 상황이 있다.
그 방법에 대해서 알아보자.

 


  배열 -> ArrayList  

먼저 ArrayList의 생성자를 살펴 볼 필요가 있다.

출처 - Oracle의 Java Platform SE 8 API

두 번째 생성자를 보면, 매개변수로 받은 컬렉션 데이터 목록으로 ArrayList 객체를 생성한다는 것을 알 수 있다.

그렇다면 배열을 컬렉션 자료구조로 바꾸는 방법은 무엇일까?

Arrays 클래스의 정적 메소드인 Arrays.asList() 를 사용하면 된다.
Array.asList() 메소드는 배열을 List 형으로 반환한다. (Arrays.asList()로 생성된 객체는 데이터 추가/삭제와 같은 수정이 불가능하다.)

 

따라서 배열을 ArrayList 로 변환하는 예시를 보면 다음과 같다.

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

public class ChangeCollection {
   public static void main(String[] args) {
      String [] alphabet = new String [] {"A", "B", "C"};
      
      ArrayList<String> list = new ArrayList<>(Arrays.asList(alphabet));
      System.out.println(list); // [A, B, C] 출력
   }
}

ArrayList<String> list = new ArrayList<>(Arrays.asList(alphabet));

배열의 자료형이 String 이므로, ArrayList의 자료형을 String으로 제한하고
ArrayList 생성자에 Arrays.asList() 메소드를 통해 반환된 List 객체를 넘겨주었다.
따라서, 배열의 데이터를 가진 ArrayList 객체가 생성된 모습이다.

단,  List<String> list = Arrays.asList(alphabet)와 같이 생성자를 사용하지 않고 바로 대입한다면 list와 alphabet이 같은 주소를 공유하므로 서로의 데이터에 영향을 준다. Shallow copy

 

  ArrayList -> 배열  

ArrayLIst를 포함한 Collection 객체에서는 데이터를 배열로 변환하기 위해 toArray()라는 메소드를 제공한다.

toArray() 메소드에 파라미터를 넣지 않아도 배열로 반환이 되지만, Object 배열로 리턴하기 때문에 매개변수로 타입을 지정해주는 것이 좋다.

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

public class ChangeCollection {
   public static void main(String[] args) {
      ArrayList<String> list = new ArrayList<>();
      list.add("A");
      list.add("B");
      list.add("C");
      
      String [] alphabet = list.toArray(new String[list.size()]);
      System.out.println(Arrays.toString(alphabet));
      // [A, B, C] 출력
   }
}

String [] alphabet = list.toArray(new String[list.size()]);

toArray() 메소드의 파라미터에 따라 리턴되는 배열 자료형이 바뀐다.
따라서 new String 으로 String 배열이 리턴되게 하였고,
배열의 크기를 size() 메소드를 통해 ArrayList 데이터 크기만큼 설정한 모습이다.
배열의 크기를 0으로 지정하면 자동으로 배열의 크기가 늘어남으로 0으로 지정해도 된다.
(하지만 배열의 크기가 ArrayList의 데이터 개수보다 작다면 문제가 생길 수 있으니 주의하자.)

 

 

  배열 -> HashSet  

배열을 Set으로, Set을 배열로 바꾸는 방법도 이와 동일하므로 예제 코드를 통해 알아보자.

import java.util.Arrays;
import java.util.HashSet;

public class ChangeCollection {
   public static void main(String[] args) {
      String [] alphabet = new String [] {"A", "B", "C", "A"};
      
      HashSet<String> set = new HashSet<>(Arrays.asList(alphabet));
      System.out.println(set); // [A, B, C] 출력
   }
}

다만, HashSet은 중복을 허용하지 않으므로 중복된 데이터는 제거된다.

 

 

  HashSet -> 배열  

HashSet을 배열로 바꿀때도 toArray() 메소드를 사용하면 된다. 

import java.util.Arrays;
import java.util.HashSet;

public class ChangeCollection {
   public static void main(String[] args) {
      HashSet<String> set = new HashSet<>();
      set.add("A");
      set.add("B");
      set.add("C");
      set.add("A");
      
      String [] alphabet = set.toArray(new String[0]);
      System.out.println(Arrays.toString(alphabet));
      // [A, B, C] 출력
   }
}

 

 

728x90
반응형