2013-08-22 4 views
20

Arrays.asList에서 가져온 컬렉션에 대해 <Collection>.add 또는 <Collection>.addAll 작업을 수행 할 수 없습니다. 제거 작업 만 허용됩니다.List에 요소를 추가하는 방법 Arrays.asList()

그래서 List?의 이전 요소를 삭제하지 않고 List에 새 요소를 추가해야하는 경우가 생깁니다. 이것을 어떻게 할 수 있습니까?

+0

왜 추가 할 수 없습니까? 'asList'는'new ArrayList'를 리턴합니다. 오, 그것은 'ArrayList'와 같지 않습니다. –

+4

@SotiriosDelimanolis Arrays.asList에 의해 반환 된 목록은 전달 된 배열을 기반으로하며 수정할 수 없습니다. [문서] (http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html#asList (T ...)) (강조 표시됨)에서 "** 지정된 배열을 기본으로 한 고정 길이의리스트 *** (배열에 기입 해 돌려 주어지는리스트의 변경)이 메소드는, 배열베이스의 콜렉션베이스의 API와 Collection.toArray와의 사이의 다리 역할을합니다.(). 반환 된 목록은 serializable이며 RandomAccess를 구현합니다. " –

+0

@JoshuaTaylor java.util.Arrays.ArrayList' –

답변

40

만들기 새로운 ArrayList 생성자를 사용하여 :

List<String> list = new ArrayList<String>(Arrays.asList("a", "b")); 
11

한 가지 방법으로 새 ​​ArrayList 구축 :

List<T> list = new ArrayList<T>(Arrays.asList(...)); 

은 당신으로 list을하시기 바랍니다 수정할 수 있음을 다 가졌어요.

2

Arrays.asList()는 실제로 배열에 연동되는리스트를 생성하고이리스트로 변신되는 배열이다. 목록으로 사용할 수는 있지만 새 요소를 추가하는 것과 같이 특정 작업을 수행 할 수는 없습니다. 그래서 최선의 선택이 같은 다른 목록 OBJ의 생성자에 전달하는 것입니다

List<T> list = new ArrayList<T>(Arrays.asList(...)); 
1

당신은 Java8와 중간 ArrayList 주위에 얻을 수있는 스트림 :

Integer[] array = {1, 2, 3}; 
    List<Integer> list = Streams.concat(Arrays.stream(array), 
             Stream.of(4)).collect(Collectors.toList()); 

이이 같은 꽤 효율적으로해야한다 배열을 반복하고 대상 목록을 미리 할당 할 수 있습니다. 대형 배열의 경우 더 좋을 수도 있고 그렇지 않을 수도 있습니다. 항상 그렇듯이 중요하다면 측정해야합니다.

관련 문제