List 유형의 객체생성을 좀 더 간단하게 하기 위해 보통 Arrays.asList 를 많이 사용합니다.

 

특히 테스트 코드의 데이타를 생성할 때나 기본유형의 단순 List 객체를 생성할때 거의 필수로 사용하게 되는데요.

이런 식으로 말이죠 .

List<String> listAlpha = Arrays.asList("a", "b", "c", "d");
List<Integer> listNumber = Arrays.asList(1, 2, 3, 4);

그런데 이렇게 Arrays.asList를 직접 List 객체로 생성하게 되면
이 list객체에 대해서는 요소를 추가하거나 삭제할 수 없게 됩니다.

 

java.util.Arrays.asList() 는 List객체를 생성할 때 요소를 제거 할 수 없는 고정된 목록으로 생성하기 때문입니다.

 

따라서, 이 list객체에 요소를 추가( add, addAll ) 또는 삭제(remove, removeAll)를 하게 되면
UnsupportedOperationException 예외를 일으키게 됩니다.

list.add("e");
list.addAll( Arrays.asList("f", "g", "h") );

list.remove("a");
list.removeAll( Arrays.asList("b", "c", "d") );

이렇게 Arrays.asList로 바로 생성된 list객체에 대해서는
상기의 작업들은 모두 UnsupportedOperationException 을 일으키고, 실패하게 됩니다.

 

해결방법은 간단합니다.

 

ArraysList 나 LinkedList 등의 컬렉션 클래스로 한번 Wrapping 해서 사용하면 됩니다.

List<String> list = new ArrayList<>(Arrays.asList("a", "b", "c", "d"));
List<Integer> listNum = new LinkedList<>(Arrays.asList(1, 2, 3, 4));

이상, 간단한 팁이었습니다.

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기