본문 바로가기
Programming/JAVA

[Java] Arrays.asList()

by 쿠쿠씨 2022. 8. 29.
반응형

| Arrays.asList()


Arrays.asList(배열)을 통해서 배열을 ArrayList로 변환할 수 있습니다. 하지만 자주 사용하는 ArrayList와는 다른 점이 있습니다. Arrays.asList() 메서드로 변환된 List는 java.util.ArrayList 클래스의 ArrayList가 아니라 java.util.Arrays 클래스의 inner 클래스인 ArrayList입니다. java.util.Arrays.ArrayList는 배열과 같이 고정 크기를 가지기 때문에 요소의 추가,제거 등의 작업으로 크기 변경이 불가능합니다. 그래서 add(), remove() 메서드를 지원하지 않고, get(), set() 등의 메서드를 지원합니다.

만약 Arrays.asList()로 반환된 List에 add() 메서드로 데이터 추가 시 java.lang.UnsupportedOperationException 오류가 발생하게 됩니다.

 

ArrayList처럼 요소를 추가하거나 제거하고 싶다면 ArrayList를 생성하여 값을 넣어줘야 합니다.

1. ArrayList로 Arrays.asList()를 랩핑

2. ArrayList 생성 후 addAll() 메서드로 값을 추가

public static void main(String[] args) {
	String [] array = {"apple", "banana", "carrot"};
	List<String> list1 = Arrays.asList(array);
	List<String> list2 = new ArrayList<>(list1);	//1
	List<String> list3 = new ArrayList<>();		
	list3.addAll(list1);				//2
	
	System.out.println(list1);	//[apple, banana, carrot]
	System.out.println(list2);	//[apple, banana, carrot]
	System.out.println(list3);	//[apple, banana, carrot]
	
	//list1.add("tomato");	오류 java.lang.UnsupportedOperationException
	//System.out.println(list1);
	list2.add("tomato");
	System.out.println(list2);	//[apple, banana, carrot, tomato]
	list3.remove(2);
	System.out.println(list3);	//[apple, banana]
}

 

Arrays.asList()로 List 객체를 만들면 원본 배열의 주소값을 가져오게 되어, 값 변경 시 원본 배열의 값도 함께 변경됩니다. Arrays.asList()로 반환된 List에 set() 메서드를 이용하여 0번 인덱스 값을 변경해 보았습니다. 그러자 원본 배열의 0번 인덱스 값도 변경되었습니다.

	//set() 메서드로 값 변경
	list1.set(0, "pineapple");
	System.out.println(list1);			//[pineapple, banana, carrot]
	System.out.println(Arrays.toString(array));	//[pineapple, banana, carrot]

 

 

| References


https://eatnows.tistory.com/75

https://johnmarc.tistory.com/145

 

반응형

댓글