Arrays.asList()에 의해 작성된 목록의 remove()가 UnsupportedOperation을 슬로우합니다.예외.
컬렉션이 있습니다.c1<MyClass>
및 배열a<MyClass>
어레이를 컬렉션으로 변환하려고 합니다.c2
하고 있다c1.removeAll(c2)
하지만 이것은 던진다.UnsupportedOperationException
제가 찾은 바로는asList()
of ArraysArrays.ArrayList
class 및 이 클래스는 class를 상속합니다.removeAll()
부터AbstractList()
그 구현이 실패하는UnsupportedOperationException
.
Myclass la[] = getMyClass();
Collection c = Arrays.asList(la);
c.removeAll(thisAllreadyExistingMyClass);
요소를 제거할 수 있는 방법이 있습니까?제발 도와주세요.
Arrays.asList
a를 반환하다List
어레이를 감싸고 있습니다.이 래퍼의 크기는 고정되어 있으며 어레이에 의해 직접 지원되므로set
어레이를 수정하고 목록을 수정하는 다른 메서드에서는 rown이 발생합니다.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))
언급URL : https://stackoverflow.com/questions/7885573/remove-on-list-created-by-arrays-aslist-throws-unsupportedoperationexception
'programing' 카테고리의 다른 글
Vue 컴포넌트의 맵을 동적으로 갱신할 필요가 있다 (0) | 2023.01.27 |
---|---|
Laravel 웅변가:조인된 테이블에서 특정 열만 가져오는 방법 (0) | 2023.01.17 |
Spring Data REST에 @OneToMany 서브 리소스 연결 게시 (0) | 2023.01.17 |
org.w3c.dom을 로드하려면 어떻게 해야 하나요?XML에서 문자열로 문서를 작성하시겠습니까? (0) | 2023.01.17 |
yaml: 행 8: 예상된 키를 찾을 수 없습니다. (0) | 2023.01.17 |