본문 바로가기
JAVA

[Java] 📚 List에서 Array로 변환, Array에서 List로 변환

by ro117youshin 2022. 8. 18.
728x90


List에서 Array로 변환

toArray() 메서드 사용.

 

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

public class ListToArray {
	public static void main(String[] args) {
    		// List 생성
        	List<String> list = new ArrayList<>();
        	list.add("Test1");
        	list.add("Test2");
       		list.add("Test3");
    		// List를 Array로 변환
	    	String[] array =  list.toArray(new String[list.size()]);
	    	// 출력
	    	for (String value : array) System.out.println(value);
	}
}

 

Array에서 List로 변환

asList() 메서드 사용.

 

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

public class ArrayToList {
	public static void main(String[] args) {
    		// Array 생성
        	String[] array = new String[3];
        	array[0] = "test1";
        	array[1] = "test2";
        	array[2] = "test3";
        	// Array를 List로 변환
        	List<String> list = new ArrayList<>(Arrays.asList(array));
        	// 출력
        	for (String value : list) System.out.println(value);
    }
}

※ Fixed-size List

Arrays.asList를 사용해서 간편하게 만들어낸 마치 Array처럼 고정된 크기의 List를 만들어 낸다.

이 List는 값을 변경할 수는 있지만, 크기에 영향을 주는 추가/삭제 (add/remove) 작업은 할 수 없다.

List<Integer> list = Arrays.asList(1,2,3,4,5,6,7);
list.set(0,5);    // 가능
list.add(5);      // error
list.remove(0);   // error

 

Arrays.asList로 생성하면 fixed-size list가 되므로 LinkedList를 새로 생성해서 삭제가 가능한 List로 만들어 낼 수 있다.

 

List<Integer> list = new LinkedList<>(Arrays.asList(1,2,3,4,5,6,7));

 

※ List 요소 삭제 시 주의사항

List 사용 시 loop를 돌면서 삭제하게 되는 경우 주의해야 한다.

List<Integer> list = new LinkedList<>(Arrays.asList(1,2,3,4,5,6,7));
for (int i = 0; i < list.size(); i++) {
	list.remove(i);
}
System.out.println(list); // [2,4,6]

 

Arrays.asList를 LinkedList를 새로 생성해서 삭제가 가능하게 했다.

for문에서 i가 index값으로 list요소를 삭제하지만, 삭제할 때 마다 List의 size가 줄어들면서 index값도 변동하기 때문에 예상하는 결과 값을 얻을 수 없다.

 

List<Integer> list = new LinkedList<>(Arrays.asList(1,2,3,4,5,6,7));
for (int i = 0; i < list.size(); i++) {
	list.remove(0);
}
System.out.println(list); // [5, 6, 7]

 

항상 index 0의 값을 삭제해도 원하는 값을 얻을 수 없다. 

i 가 증가하면서 size도 감소하기 때문에 어느 정도 loop가 진행되고 나면 i 가 size 이상의 값이 되고 loop가 멈추게 된다.

 

Solution

List<Integer> list = new LinkedList<>(Arrays.asList(1,2,3,4,5,6,7));
int listSize = list.size();
for (int i = 0; i < listSize; i++) {
	list.remove(0);
}
System.out.println(list); // []

 

int 변수를 생성하여 (loop를 돌기 이전) 초기의 List size 값을 잡아두고 loop의 반복회수를 고정시켜 원하는 값을 얻을 수 있다.

댓글