programing

Arrays.asList()에 의해 작성된 목록의 remove()가 UnsupportedOperation을 슬로우합니다.예외.

itsource 2023. 1. 17. 21:34
반응형

Arrays.asList()에 의해 작성된 목록의 remove()가 UnsupportedOperation을 슬로우합니다.예외.

컬렉션이 있습니다.c1<MyClass>및 배열a<MyClass>어레이를 컬렉션으로 변환하려고 합니다.c2하고 있다c1.removeAll(c2)하지만 이것은 던진다.UnsupportedOperationException제가 찾은 바로는asList()of ArraysArrays.ArrayListclass 및 이 클래스는 class를 상속합니다.removeAll()부터AbstractList()그 구현이 실패하는UnsupportedOperationException.

    Myclass la[] = getMyClass();
    Collection c = Arrays.asList(la);
    c.removeAll(thisAllreadyExistingMyClass);

요소를 제거할 수 있는 방법이 있습니까?제발 도와주세요.

Arrays.asLista를 반환하다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

반응형