컬렉션 c1<MyClass>
과 배열이 a<MyClass>
있습니다. 나는 컬렉션에 배열을 변환하려고 c2
하고 할 c1.removeAll(c2)
,하지만이 발생합니다 UnsupportedOperationException
. 나는 것을 발견 asList()
배열 클래스 반환의 Arrays.ArrayList
클래스와이 클래스는 상속 removeAll()
에서 AbstractList()
그 구현이 발생합니다 UnsupportedOperationException
.
Myclass la[] = getMyClass();
Collection c = Arrays.asList(la);
c.removeAll(thisAllreadyExistingMyClass);
요소를 제거하는 방법이 있습니까? 도와주세요
답변
Arrays.asList
List
배열 주위 에 래퍼를 반환합니다 . 이 래퍼는 크기가 고정되어 있으며 배열에 의해 직접 지원되며 이러한 호출 set
은 배열을 수정하고 목록을 수정하는 다른 모든 메서드는 UnsupportedOperationException
.
이 문제를 해결하려면 래퍼 목록의 내용을 복사하여 수정 가능한 새 목록을 만들어야합니다. 다음을 사용하는 ArrayList
생성자를 사용하면 쉽습니다 Collection
.
Collection c = new ArrayList(Arrays.asList(la));
답변
예,은 ( Arrays.asList(..)
는) 확장하거나 축소 할 수없는 컬렉션입니다 (원래 배열이 지원하고 크기를 조정할 수 없기 때문입니다).
요소를 제거 new ArrayList(Arrays.asList(..)
하려면 배열에서 직접 요소를 만들 거나 제거합니다 (효율성이 떨어지고 쓰기가 더 어렵습니다).
답변
이것이 Array.asList()
작동 방식 입니다. 어레이에 의해 직접 지원되기 때문입니다. 완전히 수정 가능한 목록을 얻으려면 컬렉션을 직접 만든 컬렉션으로 복제해야합니다.
Collection c = new ArrayList(Arrays.asList(la))