Arrays.asList ()에서 만든 목록의 remove ()에서 UnsupportedOperationException이 발생합니다.
컬렉션 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))
'program tip' 카테고리의 다른 글
.Net에서 PDF 문서 읽기 (0) | 2020.09.16 |
---|---|
Windows에서 Python 2.6 용 Setuptools를 설정하려면 어떻게해야합니까? (0) | 2020.09.16 |
composer : 패키지의 정확한 버전을 찾는 방법은 무엇입니까? (0) | 2020.09.16 |
Spring Boot에서 암시 적으로 사용되는 Jackson JSON 매퍼를 사용자 정의하는 방법은 무엇입니까? (0) | 2020.09.16 |
Java에서 Enum을 싱글 톤으로 사용하는 가장 좋은 방법은 무엇입니까? (0) | 2020.09.16 |